我在C ++中使用libsndfile来读取WAV文件。有两点我不明白:
sf_readf_float()
读取?有没有办法做到这一点?答案 0 :(得分:2)
格式字段会为您提供BPS。例如:SF_FORMAT_PCM_16。
无论输入声音的bps如何,sf_readf_float都会将样本转换为-1.0到1.0范围。你只需要关心音频频道。如果音频有2个频道并且您阅读了4个浮点数,那么您将拥有:
sample-1 of left channel
sample-1 of right channel
sample-2 of left channel
sample-2 of right channel
然后,要绘制点,必须将[-1.0; 1.0]转换为视口高度。对于例如如果视口位于Y = 20且高度为300px,则公式为:
PY = (int)(20.0 + (sample_value / 2.0 + 0.5) * 300.0);