Пример #1
0
        //private async Task MixAudioTracks()
        //{
        //    var audioTrackShortList = new List<short[]>();

        //    foreach (var audioTrack in audioTracks)
        //    {
        //        var audioTrackShort = new short[(int)Math.Ceiling((double)audioTrack.Length / 2)];
        //        Buffer.BlockCopy(audioTrack, 0, audioTrackShort, 0, audioTrack.Length);

        //        audioTrackShortList.Add(audioTrackShort);
        //    }

        //    var output = new short[audioTrackShortList.Max(x => x.Length)];

        //    for (int i = 0; i < output.Length; i++)
        //    {
        //        float mixed = MixTracks(audioTrackShortList, i);

        //        // reduce the volume a bit:
        //        // mixed *= (float)0.8;
        //        // hard clipping
        //        if (mixed > 1.0f) mixed = 1.0f;
        //        if (mixed < -1.0f) mixed = -1.0f;
        //        short outputSample = (short)(mixed * 32768.0f);

        //        output[i] = outputSample;
        //    }

        //    await PlayAudioTrack(output);
        //}

        //private float MixTracks(List<short[]> audioTrackShortList, int i)
        //{
        //    float mixed = 0;

        //    foreach (var audioTrack in audioTrackShortList)
        //    {
        //        if (i < audioTrack.Length)
        //        {
        //            mixed += (audioTrack[i] / 32768.0f);
        //        }
        //    }

        //    return mixed;
        //}

        async Task PlaybackButton_Click()
        {
            if (memoryStream.Length > 0)
            {
                var audioArray = memoryStream.ToArray();

                await _audioPlayback.PlayAudioTrack(audioArray);
            }
        }
Пример #2
0
        public async Task MixAudioTracks(List <byte[]> audioTracks)
        {
            var audioTrackShortList = new List <short[]>();

            foreach (var audioTrack in audioTracks)
            {
                var audioTrackShort = new short[(int)Math.Ceiling((double)audioTrack.Length / 2)];
                Buffer.BlockCopy(audioTrack, 0, audioTrackShort, 0, audioTrack.Length);

                audioTrackShortList.Add(audioTrackShort);
            }

            var output = new short[audioTrackShortList.Max(x => x.Length)];

            for (int i = 0; i < output.Length; i++)
            {
                float mixed = MixTracks(audioTrackShortList, i);

                // reduce the volume a bit:
                // mixed *= (float)0.8;
                // hard clipping
                if (mixed > 1.0f)
                {
                    mixed = 1.0f;
                }
                if (mixed < -1.0f)
                {
                    mixed = -1.0f;
                }
                short outputSample = (short)(mixed * 32768.0f);

                output[i] = outputSample;
            }

            await _audioPlayback.PlayAudioTrack(output);
        }