1.サウンドの再生

まずはサウンド再生ライブラリから取り掛かります。サウンド関連は他の機能と完全に切り離して作れるのでとっかかりやすいのです。

ライブラリの作成はちょっと古いですがDirectSoundを使用します。

以下から作成したライブラリをダウンロードできます。mp3、ogg、waveファイルに対応しています。

ChaSoundLib1.3 zip [windows]2020/02/08download
ChaSoundLib1.3 Source zip [windows]2020/02/08download
ChaSoundLib1.4 zip [windows]2020/03/22download
ChaSoundLib1.4 Source zip [windows]2020/03/22download





サウンドライブラリのAPIに関しては以下を参照してください。


ChaSoundLib API一覧
CPCMAudio()-オーディオ再生デバイスを作成します。
CPCMAudio( int sample, int ave ) sample: 周波数の分割数を指定します。デフォルトでは32です。
ave: 周波数を表示する際に、この値の数の過去のフレーム数で平均化します。デフォルトでは5です。
オーディオ再生デバイスを作成します。
bool Init( HWND parent_wnd, int start_id ) parent_wnd: デバイスの親ウィンドウを指定します。なければNULLでかまいません。
start_id: サウンドファイル識別IDにこの値が加えられます。start_id=100でファイルオープン時にidを5にするとデバイスはidを105で識別します。通常は0でかまいません。
オーディオ再生デバイスを初期化します。
bool Open(wchar_t *filename, int id )filename: 再生するオーディオファイル(mp3, ogg, wave)のパスを指定します。
id: CPCMAudioデバイスは複数のファイルをリストで管理します。ファイルを識別するためにユーザが好きな値を指定してください。
mp3, ogg, waveファイルを開いてリストに追加します。
bool Open(wchar_t *filename, int id, CAudioData *audio_data )filename: 再生するオーディオファイル(mp3, ogg, wave)のパスを指定します。
id: CPCMAudioデバイスは複数のファイルをリストで管理します。ファイルを識別するためにユーザが好きな値を指定してください。
audio_data: 既に存在しているAudioDataにロードしたい場合は指定します。
mp3, ogg, waveファイルを開いてリストに追加します。
bool Play( int id )id: Openで指定したIDを指定します。idで指定したオーディオを再生します。
bool Stop( int id )id: Openで指定したIDを指定します。idで指定したオーディオを停止します。
bool Pause( int id )id: Openで指定したIDを指定します。idで指定したオーディオを一時停止します。
bool Seek( int id, double pos )id: Openで指定したIDを指定します。
pos:シーク位置を指定します。0.0=ファイル先頭、1.0=ファイル末尾です。
idで指定したオーディオを指定位置までシークします。
bool Pause( int id )id: Openで指定したIDを指定します。idで指定したオーディオを一時停止します。
bool Close( int id )id: Openで指定したIDを指定します。idで指定したオーディオを停止してメモリを解放します。
bool Mute( bool do_mute )do_mute: true=ミュートする。false=ミュート終了します。オーディオデバイスをミュートします。
bool SetPlayOnce( int id, bool play_once )id: Openで指定したIDを指定します。
play_once: trueを指定すると再生が最後まで終わると停止します。falseを指定するとループします。
idで指定したオーディオの終了時の処理を設定します。
bool GetPlayOnce( int id )id: Openで指定したIDを指定します。現在のplay_onceの設定値を返します。
int GetTotalTime( int id )id: Openで指定したIDを指定します。曲の長さ(秒)を返します。
double GetPlayingTime( int id )id: Openで指定したIDを指定します。現在の再生位置(秒)を返します。
double GetPlayPos( int id )id: Openで指定したIDを指定します。現在の再生位置を返します。0.0=ファイル先頭、1.0=ファイル末尾です。
int GetStatus(int id)id: Openで指定したIDを指定します。

[返り値]
AUDIO_STATUS_CLOSE:ファイルは閉じられています。
AUDIO_STATUS_INIT:ファイルが開かれ再生の準備ができています。
AUDIO_STATUS_PAUSE:ファイルは一時停止中です。
AUDIO_STATUS_PLAYING:ファイルは再生中です。
AUDIO_STATUS_STOP:ファイルは停止中です。
現在のファイルのステータスを返します。
double GetVolume( int id )id: Openで指定したIDを指定します。現在の音量を取得します。最低:0.0 最大:1.0です。
bool SetVolume( int id, double volume )id: Openで指定したIDを指定します。
volume: ボリューム値を指定します。0.0:最低、1.0:最大です。
オーディオの音量を設定します。
bool SetLoop( int id, bool loop)id: Openで指定したIDを指定します。
loop: true=ループ再生します。false=再生が終わると停止します。
曲の繰り返し再生を設定します。
bool GetLoop( int id )id: Openで指定したIDを指定します。曲の繰り返し設定値を取得します。繰り返し再生が設定されているとtrueを返します。
int GetID( int num )num: 取得したいリストの番号を指定します。オーディオのリストのnum番目の要素のID番号を返します。
int GetListSize() -オーディオリストの要素数を返します。
double FFTRight[]周波数の値が書き込まれます。配列の要素数はCPCMAudio()で作成されたsampleの数です。デフォルトでは32です。-
double FFTLeft[]周波数の値が書き込まれます。配列の要素数はCPCMAudio()で作成されたsampleの数です。デフォルトでは32です。-
int CurrentID現在選択されているオーディオIDの番号が書き込まれます。-





以下に本ライブラリを使用した簡単なプログラムとソースを置いておきます。単純に音を鳴らすだけです。

SoundSample(exe) zip [windows]2020/02/08download
SoundSample Source zip [windows]2020/02/08download
SoundSample1.1(exe) zip [windows]2020/03/22download
SoundSample1.1 Source zip [windows]2020/03/22download





もう少し込み入った使い方をしたい人は以下のデバッグプレイヤーのソースを参照してみてください。

(注)手持ちのMP3を再生した時に音飛びするという人はMP3のビットレートを確認してみてください。このライブラリは128,192,320bpsのようにきっちりしたビットレートにしか対応してません。


SoundDebugWindow1.1(exe) zip [windows]2020/02/09download
SoundDebugWindow1.1 Source zip [windows]2020/02/09download
SoundDebugWindow1.2(exe) zip [windows]2020/03/22download
SoundDebugWindow1.2 Source zip [windows]2020/03/22download




© 2018 Chafumi Touji