06/08/22 03:22:21 ifxxTdvS
>>277
音出さないでoggデコードだけするシンプルなサンプルなら、mspv10_oggのソースがわかりやすいかもしれません。
MoonShell 1.31のダウンロードページのMSPV40SDKに入ってます。
ストリームPCM周りは全部MoonShellに依託するので音は出ませんが。
main.cppのStart関数が始めにファイルハンドル付きで呼ばれて、あとは定期的にUpdate関数が呼び出されるだけです。で、最後にFree関数で解放。
ov_open_callbacks使ってますが、別段問題ありませんでした。
メインメモリに直接マッピングされたoggバイナリを展開するなら、
size_t callbacks_read_func (void *ptr, size_t size, size_t nmemb, void *datasource){
s32 len=size*nmemb;
if((FileSize<=FileOffset)||(len<=0)) return(0);
if(len>(FileSize-FileOffset)) len=FileSize-FileOffset;
u8 *pu8=(u8*)ptr;
for(s32 cnt=0;cnt<len;cnt++){
pu8[cnt]=FileBuf[FileOffset];
FileOffset++;
}
return(len);
} // 開業多すぎと怒られたので詰めました…見づらい
ってな感じで。(上のは適当に書いたので動かないと思います。雰囲気だけ)
また、oggライブラリはoggTremorじゃないとCPUが間に合わなかった記憶があります。
-DLOW_ACCURACYしないとoggTremorでも音飛びしましたが、これは私の最適化技術の低さの成せる技だと思います。
あと蛇足ですが、-fsigned-charもやっとかないとダメだったような気がします。
とりあえず、いま192さんが作っているプロジェクトのMakefileに-fsigned-charを追加してみてはいかがでしょうか。
わたしも否定的なレスばかりにならないように心掛けたいです。(ほんとに(苦笑