ページ 11

OpenALで音を鳴らすとノイズがする

Posted: 2013年6月10日(月) 03:16
by bonbo
早速ですが質問させていただきます。
以前質問させていただいた[play]メソッドで音を鳴らすと遅れる問題は
OpenALを用いた再生関数を使うことで解決できたのですが
今度はノイズが出る(というよりすべてザーッという音で聞こえない)という問題
が発生してしまいました。
以下のようなコードになります。
(
ここのページを見てかきました。
http://nullpot.blog.fc2.com/blog-entry-23.html
)
読み込むための関数

コード:

// CAFファイルを読み込む関数
// 拡張子部分.cafを除いたファイル名を渡して下さい
// 失敗した場合は0を返します
ALuint loadCAF(const char *name) {
    
    // CAFファイルを開きます
    
    FILE *file = ropen(name,"caf", "rb");// ropenは上記サイトにコードあり
    
    if(file) {
        
        // ファイルのサイズを取得
        fseek(file, 0, SEEK_END);
        int size = ftell(file);
        fseek(file, 0, SEEK_SET);
        
        // ファイルのサイズ分メモリを確保して読み込む
        unsigned char *bits = (unsigned char *)malloc(size);
        if(!bits) {
            fclose(file);
            NSLog(@"Error: Memory allocation failed.");
            return 0;
        }
        fread(bits, 1, size, file);
        fclose(file);
        
        // バッファを生成します
        ALuint buffer;
        alGenBuffers(1, &buffer);
        alBufferData(buffer, AL_FORMAT_MONO16, bits, size, 22050);
        
        // 生成後に確保したメモリを開放
        free(bits);
        
        return buffer;
    }
再生関数

コード:

void PlaySoundAL(ALuint soundBuffer){
    ALuint soundSource=0;
    alGenSources(1, &soundSource);
    alSourcei(soundSource, AL_BUFFER, soundBuffer);
    alSourcePlay(soundSource);
}
//グローバル変数

コード:

ALuint testSound;
デバイスの作成(最初に一度だけ実行)

コード:

        ALCdevice *deviceAL = alcOpenDevice(NULL);
        NSLog(@"test:%d",(int)deviceAL);// 24で成功している
        ALCcontext *contextAL = alcCreateContext(deviceAL, NULL);
        alcMakeContextCurrent(contextAL);
サウンドの読み込み

コード:

testSound=loadCAF("test");//test.cafを読み込む
サウンドを再生する

コード:

PlaySoundAL(testSound);
以上になります。
長い説明で申し訳ありません。

環境は
Xcode4.4、
iphone4S,iPhoneSimulater5.1
です。
よろしくお願いします。

Re: OpenALで音を鳴らすとノイズがする

Posted: 2013年6月10日(月) 23:23
by bonbo
できました。
似たような報告がなかったのでちょっと迷いましたが
http://news.mynavi.jp/column/iphone/014/index.html
ここにあるコードに基づいて書き直したらなるようになりました。
なんとかなってよかったです…