前から、音楽がおかしいな。と思っていました。
9割方、普通になっているのですが、突発的に、『ぷすっ』とか、『ぶっ』とかいう、耳障りな音がするんですよね。。
というわけで、Sound周りのログを出して、見ていたら、変なところに気づきました。。
あれ? 文字列の表示の途中で、違う文字列が、割り込まれているぞ。。(;・∀・)
こういうときって、大概、スレッドごとの同期がとれてないときですよね。。
というわけで、mutexでロックする範囲を広げてみたら、さくっとなおってしまいました。。(^^;
ほえほえ〜〜
こんなに簡単で良いのか?
音楽もちゃんとなっていますし、変なノイズもないですし、キーボードのクリック音も、ちゃんとなるように。。(^^;
void fmsound_update(int samples) { #ifdef SOUND //short soundbuf[MAX_SOUND_BUFSIZE]; int i; int length; if( !UseSound) return; OSD_MutexLock( soundMutex); // ←この位置に移動した length = get_update_samples(); /* 更新するべきサンプル数を取得 */ if( samples == 0) /* 処理したクロック分 */ { int tmp; length = min( length , tmp= ringbuffer_FreeNum( streambuffer[ AUDIOBUFFER]) ); PRINTDEBUG3(SND_LOG,"[sound][fmsound_update(0)] do clock \t update samples=%4d rate=%3.1f ringbuffer_FreeNum=%d\n", length ,(float)length/(float)sound_samples*100.0 ,tmp); } else if( samples >1) /* 指定したクロック分 */ { length = min( samples ,ringbuffer_FreeNum( streambuffer[ AUDIOBUFFER]) ); PRINTDEBUG3(SND_LOG,"[sound][fmsound_update(%4d)] shitei clock \t update samples=%4d rate=%3.1f\n",samples , length ,(float)length/(float)sound_samples*100.0); } else /* 残りバッファ全て */ { length = ringbuffer_FreeNum( streambuffer[ AUDIOBUFFER]); /* get samples to update */ PRINTDEBUG2(SND_LOG,"[sound][fmsound_update(-1)] full remain buf \t update samples=%4d rate=%3.1f\n", length ,(float)length/(float)sound_samples*100.0); } // channel=1 , left sound only 2003/1/2 ym2203_makewave( soundbuf , length *sizeof(short)); //ringbuffer_Write( streambuffer[ AUDIOBUFFER] , soundbuf, length); // 波形を、リングバッファに書き込む //ym2203_Count( 1000); //OSD_MutexLock( soundMutex); // ←最初はこの位置にあった for(i=0; i< length; i++) { ringbuffer_Put( streambuffer[ AUDIOBUFFER] ,soundbuf[i]); } OSD_MutexUnlock( soundMutex); //ringbuffer_Write( streambuffer[ AUDIOBUFFER] ,soundbuf ,length); #endif }