音楽ファイル (できれば mp3) をチャンクに分割するにはどうすればよいですか?
SDL_mixer API を使用しています。そこにいくつかの便利な機能があるかもしれませんが、私は見つけられませんでした。
目的は、各チャンクで FFT を使用して、視覚化に使用する周波数を取得することです。
音楽ファイル (できれば mp3) をチャンクに分割するにはどうすればよいですか?
SDL_mixer API を使用しています。そこにいくつかの便利な機能があるかもしれませんが、私は見つけられませんでした。
目的は、各チャンクで FFT を使用して、視覚化に使用する周波数を取得することです。
SDL_mixer ライブラリは、あなたが望むものを提供しないことがわかりました。「音楽」(MP3) のサポートにより、ミキサーの外部でファイルが再生されるため、API が提供するボリュームと位置の制御を除いて、オーディオ ストリームに自分自身を挿入することはできません。
チャンネル ミキサーを利用する代わりにオブジェクトを使用している場合はMix_Chunk
、 を使用して、音楽をストリーミングしているチャンネルに自分自身をエフェクトとして追加できますMix_RegisterEffect
。Mix_SetPostMix
個々のチャンネルの代わりにチャンクの最終的なミックスを視覚化する場合は、 を使用してミックスの後に挿入できます。ただし、これらのチャンクは、ストリーミングではなく完全にメモリにロードされるため、短いサウンドに最適です。現在、MP3 はサポートされていません。
SDL を使用することにコミットしている場合は、このタスクに SDL_sound を使用することを検討してください。これは、ファイルのデコードのみを処理する SDL の別の拡張機能です。を使用すると、一度にデータのチャンクが渡されますSound_Decode
。Mix_HookMusic
次に、ストリームのようなアプローチを維持するために使用して、デコードされたデータを取得し、ミキサーに渡すことができます。または、ストリーミングを犠牲にしてミキサーとエフェクト機能を利用したい場合は、ファイル全体を でロードSound_DecodeAll
し、直接入力することもできます。Mix_Chunk
注意事項:
Sound_SetBufferSize
この問題を単純化するために使用できる場合があります。