2017-01-06 5 views
0

私は学校のプロジェクトのためのゲームを作っています。レーザーが発射されるたびに再生するはずの効果音があります。それがうまくいった短い時間があったが、それ以来停止している。停止した後、ファイルをデータファイルに保存したいので、コードを少し変更しました。アレグロアレグロの音がうまくいかない(wavファイルを再生する)

install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL); 

初期音これは、ロードするためのコードとそれは、任意の重要秒未満である場合

//Loading sound file from datafile 
DATAFILE *laserShot = NULL; 
laserShot = load_datafile_object("asteroids.dat", "laser_Shot"); 

//Error checking 
if (laserShot->dat == NULL) { 
    allegro_message("Error loading laser_Shot.wav"); 
} 
else { 
    //Playing sound for shot 
    play_sample((SAMPLE*) laserShot->dat, 255, 127, 1000, 0); 
} 

//Freeing memory 
unload_datafile_object(laserShot); 

音自体が非常に短い音を再生しています。 音が連続して複数回再生しようとしているかもしれませんが、実際には元々動作していたときよりも今はもっと休憩しているので、違いはないと思います。

私はまったく間違っていますか?

答えて

0

ことによってそれを解放し、私はちょうど私が私がサウンドファイルを再生したのと同じ機能でアンロード機能を呼び出した、愚かなミスを作っていたが判明します。ファイルがアンロードされる前にサウンドファイルを再生するのに十分な時間がなかったので、技術的にはコンパイラが拾うエラーもクラッシュすることもなく、コードはすでに忘れてしまったサウンドを再生しようとしていました。アンロードの呼び出しを削除すると、サウンドが再生されます。

0

まず、すべてのパラメータが設定されていることを確認します。これは、install_soundだけを呼び出す場合と異なります。

set_config_int("sound", "quality", 1); 

第3パラメータは、使用される音質を指します。これは最高品質を意味するはずです。別のタイプが必要な場合は、allegro libsの参照を検索する必要があります。

第2に、の音声を割り当てる必要があります。ボイスは基本的にサンプルを再生するためのメモリ内の領域です。デフォルトでは、アレグロ4は255の異なるボイスを割り当てることができますが、ハードウェアのために実際の数ははるかに少なくなります。

int laser_voice = allocate_voice("sample.wav"); 

ボリューム、パン、スイープ、プレイモードなどのパラメータを設定できるようになりました。例えば、あなたが元のように同じ周波数と音量で、ループ状のサンプルを再生したい場合は、あなたがこれを行う必要があります。

voice_set_volume( laser_voice, 200); 
voice_set_pan(  laser_voice, 127); 
voice_set_playmode(laser_voice, PLAYMODE_LOOP); 

他のオプションについては、次の参照を訪問するべきです。サンプルを再生するには今すぐ

、あなただけの、あなたはそれを停止、それを再生、変更パラメータまたはreallocate_voiceでサンプルを変更することができます

voice_start(laser_voice); 

を呼び出します。それで全部です。コードの最後に、あなたが

deallocate_voice(laser_voice); 
関連する問題