Cで libmad を使用する方法を理解しようとしています。問題は、libmadがオーディオファイルを.pcmファイルに変換し、これらのファイルを再生する方法を見つけることができないことです。単純な.pcmプレーヤーはなく、pcmファイルを開こうとするたびにAudacityがクラッシュします。誰かがこれについて何か経験がありますか?私はこれらのpcmファイルをwavファイルまたは他の形式に変換することにオープンですが、これを行う簡単な方法はありません(少なくとも私はそれを見つけていません)。
有効なPCMデータを取得していますか?どのタイプのPCMを入手していますか?
基本PCM は オーディオCD および WAVファイル CDからリッピングされます。ほぼ何でもプレイできるはずです。具体的には、16ビット(サンプルあたり)、44.1 kHz(サンプルレート)、ステレオ(2チャンネル)です。この種のPCMの再生は、cat file.pcm > /dev/audio
(または/dev/dsp
または別の適切なオーディオデバイス)と同じくらい簡単です。
libmadホームページ は、libmadがデフォルトで24ビットPCMを出力する可能性があることを示しており、標準の16ビットPCMを期待している場合、プレーヤーソフトウェアが混乱する可能性があります。まだ行っていない場合は、プログラムのlibmadの使用法を madlld
(libmad低レベルAPIチュートリアル) と照合して、ライブラリから正しい出力が得られていることを確認してください。
PCMデータにはWAVファイルのようにヘッダーが含まれていないため、ファイルを正しくロードするには、プログラムのPCM形式を指定する必要がある場合があります。 Audacityは、標準のPCM形式を処理できる必要があります。
ライブラリのバグまたはコードによるライブラリの不適切な使用が原因で、libmad
から無効なPCM出力を取得している可能性もあります。
Ubuntu Linux 15.10
Sudo apt-get install ffmpeg
ffplay -autoexit -f u16be -ar 44100 -ac 1 in.raw
または:
Sudo apt-get install play
play -b 16 --endian big -e unsigned -r 44100 in.raw
ffplay
オプション:
-autoexit
:ストリームが終了したらプレーヤーを終了します-f
:フォーマット:u
:署名なし16
:値あたり16ビットbe
:ビッグエンディアン-ar
:サンプル周波数-ac
:チャンネル数play
オプション:値を比較します;-)
プレイする独自の.raw
ファイルを生成する方法の例: https://stackoverflow.com/questions/732699/how-is-audio-represented-with-numbers/36510894#36510894 ==
参照: https://stackoverflow.com/questions/20314739/how-to-play-pcm-sound-file-in-ubunt
おそらく、 Sox のようなツールを使用できます
SoXは、さまざまな形式のコンピューターオーディオファイルを他の形式に変換できるクロスプラットフォーム(Windows、Linux、MacOS Xなど)のコマンドラインユーティリティです。また、これらのサウンドファイルにさまざまなエフェクトを適用でき、追加のボーナスとして、SoXはほとんどのプラットフォームでオーディオファイルを再生および録音できます。