コード例 #1
0
ファイル: SavWav.cs プロジェクト: MeepsKitten/NotReaper
    public static byte[] GetWav(AudioClipData clipData, out uint length, WavModificationOptions options)
    {
        var data = ConvertAndWrite(clipData.samples, out length, out var samples, options);

        WriteHeader(data, clipData.frequency, clipData.channels, length, samples);

        return(data);
    }
コード例 #2
0
ファイル: SavWav.cs プロジェクト: MeepsKitten/NotReaper
    public static void Save(string filename, AudioClip clip, WavModificationOptions optionsParam = null)
    {
        AudioClipData data = new AudioClipData();

        data.samples = new float[clip.samples * clip.channels];
        clip.GetData(data.samples, 0);

        data.frequency = (uint)clip.frequency;
        data.channels  = (ushort)clip.channels;

        Save(filename, data, optionsParam);
    }
コード例 #3
0
ファイル: SavWav.cs プロジェクト: MeepsKitten/NotReaper
    public static void Save(string filename, AudioClipData clipData, WavModificationOptions optionsParam = null)
    {
        WavModificationOptions options = optionsParam != null ? optionsParam : new WavModificationOptions();

        if (!filename.ToLower().EndsWith(".wav"))
        {
            filename += ".wav";
        }

        var filepath = Path.Combine(Application.persistentDataPath, filename);

        // Make sure directory exists if user is saving to sub dir.
        Directory.CreateDirectory(Path.GetDirectoryName(filepath));

        using (var fileStream = new FileStream(filepath, FileMode.Create))
            using (var writer = new BinaryWriter(fileStream))
            {
                var wav = GetWav(clipData, out var length, options);
                writer.Write(wav, 0, (int)length);
            }
    }
コード例 #4
0
ファイル: SavWav.cs プロジェクト: MeepsKitten/NotReaper
    private static byte[] ConvertAndWrite(float[] samples, out uint length, out uint samplesAfterTrimming, WavModificationOptions options)
    {
        var sampleCount = samples.Length;

        var start = 0;
        var end   = sampleCount - 1;

        if (options.trimSamples > 0)
        {
            start = (int)options.trimSamples;
        }

        if (options.silenceSamples > 0)
        {
            sampleCount += (int)options.silenceSamples;
        }

        var buffer = new byte[(sampleCount * 2) + HeaderSize];

        var p = HeaderSize;

        //Write out silence samples
        if (options.silenceSamples > 0)
        {
            for (uint i = 0; i < options.silenceSamples; ++i)
            {
                buffer[p++] = 0;
                buffer[p++] = 0;
            }
        }

        for (var i = start; i <= end; i++)
        {
            var value = (short)(samples[i] * RescaleFactor);
            buffer[p++] = (byte)(value >> 0);
            buffer[p++] = (byte)(value >> 8);
        }

        length = p;
        samplesAfterTrimming = (uint)(end - start + 1) + options.silenceSamples;
        return(buffer);
    }