Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过此代码更改音频采样器当前更改了位深度?_C#_Audio - Fatal编程技术网

C# 通过此代码更改音频采样器当前更改了位深度?

C# 通过此代码更改音频采样器当前更改了位深度?,c#,audio,C#,Audio,好吧,我想不出一个好的话题 关键是,我有一个代码,我得到了帮助,它将位深度从32位更改为16位,不确定它是如何工作的,但我认为它只是删除了其他位,没有什么特别之处 因此,如果可以用代码实现这一点,那么应该可以更改采样器。 此外,我不希望这里有什么花哨的东西,因为它更多的是用于调试,我只想把它做成其他的采样器,它不必是“重采样” 比如说,如果音频是48khz,我在播放到47khz时对其重新采样,它的声音将与它仍然认为是48khz的声音不同,这意味着它将播放得更慢 换句话说,我将用它以一种非常简单的

好吧,我想不出一个好的话题

关键是,我有一个代码,我得到了帮助,它将位深度从32位更改为16位,不确定它是如何工作的,但我认为它只是删除了其他位,没有什么特别之处

因此,如果可以用代码实现这一点,那么应该可以更改采样器。 此外,我不希望这里有什么花哨的东西,因为它更多的是用于调试,我只想把它做成其他的采样器,它不必是“重采样”

比如说,如果音频是48khz,我在播放到47khz时对其重新采样,它的声音将与它仍然认为是48khz的声音不同,这意味着它将播放得更慢

换句话说,我将用它以一种非常简单的方式改变音频的速度

下面是更改位深度的代码,我希望可以重用这些代码

Int32 bytesrecorded = e.BytesRecorded;
byte[] newArray16Bit = new byte[bytesrecorded / 2];
fixed (byte* sourcePtr = e.Buffer)
fixed (byte* targetPtr = newArray16Bit)
{
    float* sourceTyped = (float*)sourcePtr;
    short* targetTyped = (short*)targetPtr;

    Int32 count = bytesrecorded / 4;
    for (int i = 0; i < count; i++)
    {
        targetTyped[i] = (Int16)(sourceTyped[i] * Int16.MaxValue);
    }
}
Int32字节记录=e.bytesrecorded;
byte[]newArray16Bit=新字节[bytesrecorded/2];
固定(字节*sourcePtr=e.Buffer)
固定(字节*targetPtr=newArray16Bit)
{
float*sourceTyped=(float*)sourcePtr;
short*targetTyped=(short*)targetPtr;
Int32计数=字节记录/4;
for(int i=0;i
e.Bytesrecorded
=音频缓冲区的大小

e.Buffer
=实际缓冲区

由于我不完全理解这一点,我只是简单地看一下/2,并假设它只是划分大小的长度,然后/4部分将移动字节以使其适合

虽然我不知道如何使用它来更改采样器,因为这只是字节的移动,但为采样器制作一些东西应该不会太难


谢谢

如果您想调整速度,有几种可能的解决方案:

  • 使用重采样器对曲目进行重采样,例如从44100Hz到 50000Hz,但仍告诉音频驱动程序以44100Hz播放
  • 只需更改文件的采样器,而不更改文件的内容 文件例如,修改波头并更改采样器。 音频播放器将读取波头的采样器,并将 使用例如60000Hz的采样器播放44100Hz的曲目
  • 使用专业的dsp算法来调整速度

  • 我不想使用文件,它是一个流,需要“实时”完成,这就是为什么要对它进行编码,它是用于流的。Libsamplerate可以实时使用。更改位深度和采样率是完全不同的过程。这代码帮不了你。好吧,很高兴知道这一点。难道没有类似的方法吗?因为我只想减少samplerate,这意味着,以某种方式删除一些字节。不,你不仅仅是删除字节。我在回答这个问题时详细讨论了这两个问题: