ページ 1 / 1
wavの再生で再生されないのですが。
Posted: 2010年3月28日(日) 15:14
by ryu
初投稿です、よろしくお願いします。
DX ライブラリのPlaySoundを使用しwavを再生しようとしています。
Aのファイルは普通に再生できるのですが、Bのファイルは再生できません。
ファイルの位置はABどちらも同じ階層においてあり
名前もコピーしているので大丈夫だと思います。
ただ再生できないBファイルが再生時間30分あり、長いからだめなのかな?
と考えているのですが・・・、あとどこをチェックすれば良いでしょうか?
よろしくお願いします。
Re:wavの再生で再生されないのですが。
Posted: 2010年3月28日(日) 16:01
by Ma
extern int PlaySoundFile( const char *FileName, int PlayType ) ; // WAVEファイルを再生する
extern int PlaySound( const char *FileName, int PlayType ) ; // PlaySoundFile の旧名称
一応念のため、PlaySoundFile を使ってみてはいかがでしょうか?
もしかしたら、ですができるかも。
でも、どちらにせよ、30分もあるようなwavファイルが必要な仕様を見直したほうが良いでしょうが・・w
Re:wavの再生で再生されないのですが。
Posted: 2010年3月29日(月) 10:54
by kazuoni
もしくは拡張子がwav形式ではないからかもしれないですね。
(フリーソフト「極窓」とかで調べてみるのも手かと)
Re:wavの再生で再生されないのですが。
Posted: 2010年3月30日(火) 00:02
by ryu
レスありがとうございます!
PlaySoundFile関数もだめでした、今回やりたいのが30分の音楽を再生するのが
目的なのでこれを外すわけにはいかず(汗
自分で関数作るしかないかもですね・・・む、難しそう。
>ファイル形式
極窓でチェックしてみました、一応Wavで間違いないようです
・・・はてさて(汗
Re:wavの再生で再生されないのですが。
Posted: 2010年3月30日(火) 00:22
by ru-pu
SetCreateSoundDataType(DX_SOUNDDATATYPE_FILE);
int snd=LoadSoundMem("wavファイル");
PlaySoundMem(snd,DX_PLAYTYPE_BACK);
これで長いwavもいけると思います
SetCreateSoundDataType(DX_SOUNDDATATYPE_FILE);
で再生形式をストリームタイプにしています
あ、sndはサウンドハンドルなので不必要になったらDeleteSoundMem(snd);で
削除するのをお忘れなく、そうしないと曲を再生する度にメモリ使用量が増えることに・・・

Re:wavの再生で再生されないのですが。
Posted: 2010年3月30日(火) 12:44
by lbfuvab
OGGに圧縮してストリーム再生にしてもダメですか?
Re:wavの再生で再生されないのですが。
Posted: 2010年3月30日(火) 12:52
by Ma
Re:wavの再生で再生されないのですが。
Posted: 2010年3月30日(火) 21:13
by no
ちょっと確認ですが、毎ループごとに再生していませんか?
再生されているかいないかを判定し、再生されていないのなら再生、という記述をしなければ再生されません。
再生部分の記述を見せていただきたいところです。
Re:wavの再生で再生されないのですが。
Posted: 2010年3月30日(火) 22:34
by ryu
みなさんありがとうございます。
SetCreateSoundDataTypeで無事再生されました!
ストリーム再生って詳しくわからないですが
今度は1時間越えもチャレンジしてみます(笑
URLも見せてもらいました、ライブラリ製作者さんが修正してくれたんですね、ありがとうございます。
3/29にも同じようなスレがあったのですね。
管理人様、過去ログを検索するときのチェックボックスをONにするやつですが
ボタン一発で全てONにできるようにしてほしいです・・・
あと再生とはまた違った質問なのですが、同じスレッドで質問して宜しいでしょうか?
早送りをしてみたく
GetFrequencySoundMem();で 周波数を取得
SetSoundCurrentPosition();で周波数x10 をし10秒の位置を指定し
PlaySoundMem(Sound,DX_PLAYTYPE_BACK,FALSE);で再生したのですが
なぜか再生された音楽は10秒ではなく5秒先の位置で再生されます。
周波数をそのまま設定すると1秒先に設定される、と書いてあったので
単純に掛け算で設定したのですが、またやり方ちがうのでしょうか?
Re:wavの再生で再生されないのですが。
Posted: 2010年3月30日(火) 23:50
by Ma
>SetSoundCurrentPosition();で周波数x10 をし10秒の位置を指定し
公式掲示板の管理人の書き込みより抜粋。
>引数 Byte で指定する値はバイトですので、例えば秒間 44.1KHz サンプルの2チャンネル、
>精度が16bitのサウンドファイルで、丁度1秒経過した箇所に再生位置を移動したい場合は
>// 44100 = サンプリングレート 2 = チャンネル数 2 = 精度16bitは2byte(8bit=1byteなので)
>SetSoundCurrentPosition( 44100 * 2 * 2, SoundHandle ) ;
この方法で計算しましたか?

Re:wavの再生で再生されないのですが。
Posted: 2010年3月31日(水) 09:01
by ryu
チャンネル数まで考えていませんでした!奥が深いですね。
単純に掛け算してました・・・・
ありがとうございました!