1

音楽ファイル (できれば mp3) をチャンクに分割するにはどうすればよいですか?

SDL_mixer API を使用しています。そこにいくつかの便利な機能があるかもしれませんが、私は見つけられませんでした。

目的は、各チャンクで FFT を使用して、視覚化に使用する周波数を取得することです。

4

1 に答える 1

0

SDL_mixer ライブラリは、あなたが望むものを提供しないことがわかりました。「音楽」(MP3) のサポートにより、ミキサーの外部でファイルが再生されるため、API が提供するボリュームと位置の制御を除いて、オーディオ ストリームに自分自身を挿入することはできません。

チャンネル ミキサーを利用する代わりにオブジェクトを使用している場合はMix_Chunk、 を使用して、音楽をストリーミングしているチャンネルに自分自身をエフェクトとして追加できますMix_RegisterEffectMix_SetPostMix個々のチャンネルの代わりにチャンクの最終的なミックスを視覚化する場合は、 を使用してミックスの後に挿入できます。ただし、これらのチャンクは、ストリーミングではなく完全にメモリにロードされるため、短いサウンドに最適です。現在、MP3 はサポートされていません。

SDL を使用することにコミットしている場合は、このタスクに SDL_sound を使用することを検討してください。これは、ファイルのデコードのみを処理する SDL の別の拡張機能です。を使用すると、一度にデータのチャンクが渡されますSound_DecodeMix_HookMusic次に、ストリームのようなアプローチを維持するために使用して、デコードされたデータを取得し、ミキサーに渡すことができます。または、ストリーミングを犠牲にしてミキサーとエフェクト機能を利用したい場合は、ファイル全体を でロードSound_DecodeAllし、直接入力することもできます。Mix_Chunk

注意事項:

  1. ミキサーが期待する出力形式でオーディオがデコードされていることを確認してください。
  2. デコーダーがミキサーに追いつかない場合があることに注意してください。その場合、ミキサーがどこにあるかに先立ってストリーミングして処理できるように、デコード用の別のプロセスを考え出す必要があります。グリッチなしで読み取り中に時折バンプします。
  3. デコーダーから取得したチャンク サイズが、分析に必要なチャンク サイズではない場合があります。Sound_SetBufferSizeこの問題を単純化するために使用できる場合があります。
于 2011-06-26T19:42:12.007 に答える