我正在編程一個C#模擬器,並決定使用CScore輸出PCM。 當樣本大小(對於每個通道)是一個字節時,聲音輸出正確,但是當我將樣本大小增加到16位時,聲音非常嘈雜。CScore輸出PCM大於一個字節
一個相關的問題,這一問題是如何將這些2個字節解釋(是他們簽下高位在前?)
這大約是我在做什麼:
首先,我產生的樣品一樣
public void GenerateSamples(int sampleCount)
{
while(sampleCount > 0)
{
--sampleCount;
for(int c = 0; c < _numChannels; ++c)
{
_buffer[_sampleIndex++] = _outputValue;
}
// The amount of ticks in a sample
_tickCounter -= APU.MinimumTickThreshold;
if(_tickCounter < 0)
{
_tickCounter = _tickThreshold;
_up = !_up;
// Replicating signed behaviour
_outputValue = (short)(_up ? 32767 : -32768);
}
}
}
這將生成一個簡單的方波,頻率由_tickThreshold決定。如果_buffer是一個字節數組,聲音是正確的。 我想輸出它與短褲,因爲它可以使我使用簽名樣本,只需添加多個通道,以混合它們。
這就是我輸出聲音的方式。
for(int i = 0; i < sampleCount; ++i)
{
for(int c = 0; c < _numChannels; ++c)
{
short sample = _channel.Buffer[_channelSampleIndex++];
// Outputting the samples the other way around doesn't output
// sound for me
_buffer[_sampleIndex++] = (byte)sample;
_buffer[_sampleIndex++] = (byte)(sample >> 8);
}
}
我使用的是WAVEFORMAT像這樣確定的:
_waveFormat = new WaveFormat(_apu.SampleRate, // 44000
_apu.SampleSize * 8, // 16
_apu.NumChannels); // 2
我敢肯定有一些明顯的我失蹤,但我一直在調試這一段時間並且似乎沒有明確指出問題所在。
謝謝
感謝分享。你可以將自己的答案標記爲正確答案;-) – GabrielOshiro