public static class AudioClipExtensions
{
/// <summary>
/// 创建说话者特定的剪辑。
/// </summary>
/// <returns>演讲者特定的剪辑。</returns>
/// <param name="originalClip">原始剪辑。</param>
/// <param name="amountOfChannels">数量的渠道</param>
/// <param name="targetChannel">目标通道。</param>
public static AudioClip CreateSpeakerSpecificClip(this AudioClip originalClip, int amountOfChannels, int targetChannel)
{
// 使用目标频道数量创建一个新的剪辑。
AudioClip clip = AudioClip.Create(originalClip.name, originalClip.samples, amountOfChannels, originalClip.frequency, false);
// 音频数组。
float[] audioData = new float[originalClip.samples * amountOfChannels];
float[] originalAudioData = new float[originalClip.samples * originalClip.channels];
if (!originalClip.GetData(originalAudioData, 0))
return null;
// 将音频从原始剪辑填充到目标频道。样品由通道(L0, R0, L1, R1等)交叉。
int originalClipIndex = 0;
for (int i = targetChannel; i < audioData.Length; i += amountOfChannels)
{
audioData[i] = originalAudioData[originalClipIndex];
originalClipIndex += originalClip.channels;
}
if (!clip.SetData(audioData, 0))
return null;
return clip;
}
}