wavの再生で再生されないのですが。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ryu

wavの再生で再生されないのですが。

#1

投稿記事 by ryu » 15年前

初投稿です、よろしくお願いします。
DX ライブラリのPlaySoundを使用しwavを再生しようとしています。
Aのファイルは普通に再生できるのですが、Bのファイルは再生できません。
ファイルの位置はABどちらも同じ階層においてあり
名前もコピーしているので大丈夫だと思います。
ただ再生できないBファイルが再生時間30分あり、長いからだめなのかな?
と考えているのですが・・・、あとどこをチェックすれば良いでしょうか?
よろしくお願いします。

Ma

Re:wavの再生で再生されないのですが。

#2

投稿記事 by Ma » 15年前

extern int PlaySoundFile( const char *FileName, int PlayType ) ; // WAVEファイルを再生する
extern int PlaySound( const char *FileName, int PlayType ) ; // PlaySoundFile の旧名称

一応念のため、PlaySoundFile を使ってみてはいかがでしょうか?
もしかしたら、ですができるかも。

でも、どちらにせよ、30分もあるようなwavファイルが必要な仕様を見直したほうが良いでしょうが・・w

kazuoni

Re:wavの再生で再生されないのですが。

#3

投稿記事 by kazuoni » 15年前

もしくは拡張子がwav形式ではないからかもしれないですね。
(フリーソフト「極窓」とかで調べてみるのも手かと)

ryu

Re:wavの再生で再生されないのですが。

#4

投稿記事 by ryu » 15年前

レスありがとうございます!
PlaySoundFile関数もだめでした、今回やりたいのが30分の音楽を再生するのが
目的なのでこれを外すわけにはいかず(汗
自分で関数作るしかないかもですね・・・む、難しそう。

>ファイル形式
極窓でチェックしてみました、一応Wavで間違いないようです
・・・はてさて(汗

ru-pu

Re:wavの再生で再生されないのですが。

#5

投稿記事 by ru-pu » 15年前

SetCreateSoundDataType(DX_SOUNDDATATYPE_FILE);
int snd=LoadSoundMem("wavファイル");
PlaySoundMem(snd,DX_PLAYTYPE_BACK);

これで長いwavもいけると思います
SetCreateSoundDataType(DX_SOUNDDATATYPE_FILE);
で再生形式をストリームタイプにしています
あ、sndはサウンドハンドルなので不必要になったらDeleteSoundMem(snd);で
削除するのをお忘れなく、そうしないと曲を再生する度にメモリ使用量が増えることに・・・ 画像

lbfuvab

Re:wavの再生で再生されないのですが。

#6

投稿記事 by lbfuvab » 15年前

OGGに圧縮してストリーム再生にしてもダメですか?


no

Re:wavの再生で再生されないのですが。

#8

投稿記事 by no » 15年前

ちょっと確認ですが、毎ループごとに再生していませんか?

再生されているかいないかを判定し、再生されていないのなら再生、という記述をしなければ再生されません。
再生部分の記述を見せていただきたいところです。

ryu

Re:wavの再生で再生されないのですが。

#9

投稿記事 by ryu » 15年前

みなさんありがとうございます。
SetCreateSoundDataTypeで無事再生されました!
ストリーム再生って詳しくわからないですが
今度は1時間越えもチャレンジしてみます(笑

URLも見せてもらいました、ライブラリ製作者さんが修正してくれたんですね、ありがとうございます。
3/29にも同じようなスレがあったのですね。
管理人様、過去ログを検索するときのチェックボックスをONにするやつですが
ボタン一発で全てONにできるようにしてほしいです・・・


あと再生とはまた違った質問なのですが、同じスレッドで質問して宜しいでしょうか?
早送りをしてみたく
GetFrequencySoundMem();で 周波数を取得
SetSoundCurrentPosition();で周波数x10 をし10秒の位置を指定し
PlaySoundMem(Sound,DX_PLAYTYPE_BACK,FALSE);で再生したのですが
なぜか再生された音楽は10秒ではなく5秒先の位置で再生されます。
周波数をそのまま設定すると1秒先に設定される、と書いてあったので
単純に掛け算で設定したのですが、またやり方ちがうのでしょうか?

Ma

Re:wavの再生で再生されないのですが。

#10

投稿記事 by Ma » 15年前

>SetSoundCurrentPosition();で周波数x10 をし10秒の位置を指定し


公式掲示板の管理人の書き込みより抜粋。

>引数 Byte で指定する値はバイトですので、例えば秒間 44.1KHz サンプルの2チャンネル、
>精度が16bitのサウンドファイルで、丁度1秒経過した箇所に再生位置を移動したい場合は

>// 44100 = サンプリングレート 2 = チャンネル数 2 = 精度16bitは2byte(8bit=1byteなので)
>SetSoundCurrentPosition( 44100 * 2 * 2, SoundHandle ) ;

この方法で計算しましたか? 画像

ryu

Re:wavの再生で再生されないのですが。

#11

投稿記事 by ryu » 15年前

チャンネル数まで考えていませんでした!奥が深いですね。
単純に掛け算してました・・・・
ありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る