音楽が、良くなった。

前から、音楽がおかしいな。と思っていました。
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
}