powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Convert Dvi ADPCM to PCM
8 сообщений из 8, страница 1 из 1
Convert Dvi ADPCM to PCM
    #38723167
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день , может кто то сталкивался с такой задачей .

Нужно проиграть файлы от атс которая пишет в формате Dvi ADPCM
...
Рейтинг: 0 / 0
Convert Dvi ADPCM to PCM
    #38723173
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения кликнул раньше времени....

Нужно проиграть эти файлы в браузере, в этом формате не воспроизводит никак.
Получается проиграть при сохранении в файл и и повторном считывании.



Использую NAudio для конвертации. Есть такой код


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
 public static byte[] ADPcmToPcm(string waveFileName, int bitRate = 128)
        {

            using (var reader = new WaveFileReader(waveFileName))
            using (var converter = WaveFormatConversionStream.CreatePcmStream(reader))
            using (var upsampler = new WaveFormatConversionStream(new WaveFormat(16000, converter.WaveFormat.Channels), converter))
            {

                WaveFileWriter.CreateWaveFile("D:\\" + System.IO.Path.GetFileName(waveFileName), upsampler);

                var reader11 = new WaveFileReader("d:\\" + System.IO.Path.GetFileName(waveFileName));
                FileStream fs = new FileStream("d:\\" + System.IO.Path.GetFileName(waveFileName), FileMode.Open, FileAccess.Read);

                byte[] bytes = new byte[fs.Length];
                int bytesToRead = (int)fs.Length;
                int bytesRead = 0;
                while (bytesToRead > 0)
                {
                    int n = fs.Read(bytes, bytesRead, bytesToRead);
                    if (n == 0) break;
                    bytesRead += n;
                    bytesToRead -= n;
                }
                bytesToRead = bytes.Length;

                return bytes;

            }


        }




если возвращать массив byte[] без сохранения не воспроизводит.

Досконально эту кухню не знаю, поэтому прощу помощи.

Формат файлы исходный reader и преобразованный reader11 на рисунке.
...
Рейтинг: 0 / 0
Convert Dvi ADPCM to PCM
    #38744412
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил, путем двойного преобразования сразу в мп3
...
Рейтинг: 0 / 0
Convert Dvi ADPCM to PCM
    #39038321
Программист 3 поколения
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey1306,

подскажите как массив byte в котором wav файл преобразовать в тот же wav, но с другим bit рейтом.

пробую так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
 public static byte[] ADPcmToPcm(Stream waveFileName, int bitRate = 128)
    {

        using (var reader = new WaveFileReader(waveFileName))
        using (var converter = WaveFormatConversionStream.CreatePcmStream(reader))
        using (var upsampler = new WaveFormatConversionStream(new WaveFormat(16000, converter.WaveFormat.Channels), converter))
        {

            //WaveFileWriter.CreateWaveFile("D:\\" + System.IO.Path.GetFileName(waveFileName), upsampler);

            //var reader11 = new WaveFileReader("d:\\" + System.IO.Path.GetFileName(waveFileName));
            //FileStream fs = new FileStream("d:\\" + System.IO.Path.GetFileName(waveFileName), FileMode.Open, FileAccess.Read);

            byte[] bytes = new byte[upsampler.Length];
            int bytesToRead = (int)upsampler.Length;
            int bytesRead = 0;
            while (bytesToRead > 0)
            {
                int n = upsampler.Read(bytes, bytesRead, bytesToRead);
                if (n == 0) break;
                bytesRead += n;
                bytesToRead -= n;
            }
            bytesToRead = bytes.Length;

            return bytes;

        }


    }

//Использование
byte[] data = new byte[0];
data = //тут пишу данные, если выдавать без преобразования файл воспроизводится;

MemoryStream stream = new MemoryStream(data);
byte[] buffer = StreamExtension.ADPcmToPcm(stream, 16);//после преобразования файл не воспроизводится
...
Рейтинг: 0 / 0
Convert Dvi ADPCM to PCM
    #39039569
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 3 поколения,

та фиг его знает, я сам с аудио не работаю, вот пришлось решать эту задачу. вроде сделал, 100% не оптимально но пока всех устаивает.

играйтесь с настройками, может что получится

или тут смотрите

http://www.codeproject.com/Articles/501521/How-to-convert-between-most-audio-formats-in-NET?msg=4886481#xx4886481xx
...
Рейтинг: 0 / 0
Convert Dvi ADPCM to PCM
    #39039578
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 3 поколения,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  try
            {


                using (var retMs = new MemoryStream())
                using (var reader = new WaveFileReader(waveFileName))
                using (var converter = WaveFormatConversionStream.CreatePcmStream(reader))
                using (var upsampler = new WaveFormatConversionStream(new WaveFormat(16000, converter.WaveFormat.Channels), converter))
                using (var wtr = new LameMP3FileWriter(retMs, upsampler.WaveFormat, 128))
                {

                    upsampler.CopyTo(wtr);

                    return retMs.ToArray();


                }
            }
            catch
            {
                return null;
            }



я так сделал
...
Рейтинг: 0 / 0
Convert Dvi ADPCM to PCM
    #39066322
Программист 3 поколения
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey1306,

Попробую, спасибо!
...
Рейтинг: 0 / 0
Convert Dvi ADPCM to PCM
    #39066564
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey1306,

Пытался я тут как-то ADPCM<>PCM на ходу кодировать/декодировать.
4-bit IMA ADPCM 8000 Hz <> 8-bit signed linear PCM 8000 Hz написать реально?
Полная нелинейщина и полная задница.

Грохнуть Unimodem Transform Module в виндах (тупо заставив драйвер модема использовать файлы из XP вместо "родных" Vista-Win10), что в моем случае решило проблему с PCM оказалось куда проще.

Я к тому, что если тебе удалось чего-то чего тебе надо сделать двойным преобразованием с применением какого-то Tool (вместо написания своего "крутого" оригинального кода), и при этом ты съекономил время, то путь в принципе верный.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Convert Dvi ADPCM to PCM
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]