3 / 3 / 0
Регистрация: 15.12.2012
Сообщений: 94
|
||||||||||||||||
1 | ||||||||||||||||
Собрать Wav файл при попарном считывании03.09.2015, 12:23. Показов 1296. Ответов 11
Метки нет (Все метки)
Здравствуйте, на вход мне подаётся Raw файл попарно считываю с него по 16 бит, и пытаюсь сформировать из них стерео wav файл(16 бит в левый, 16 в правый). Вот код того что я сделал, но почему-то сформированый файл всё равно не открывается нормально
wav.h
заметил странность что элемент дата весит 16 байт, но каждый элемент по отдельности(коих 10) весит по 4 байта Добавлено через 2 минуты Ошибка явно в этом потому что, размер даты по факту, меньше чем я прописывал в хед файле, как это исправить? Добавлено через 7 минут fwrite(&data, sizeof(long)*data.size(), 1, file_out); - изменил так строчку записи даты в файл, теперь размер правильно но всё равно файл не читается, может я неправильно записываю вектор в файл?
0
|
03.09.2015, 12:23 | |
Ответы с готовыми решениями:
11
Знаю что информация неправильно преобразовывается при записи в файл, скорее всего и при считывании тоже. Как это исправить? Написать программу, формирующую по исходному WAV файлу новый WAV файл Как определить, что файл закончился при считывании с помощью binaryreader? Как воспроизвести .wav файл при перетаскивании его с компьютера на форму |
03.09.2015, 12:25 | 2 |
Вам нужно проверить пересчет. Вы делаете из одного канала два, значит блок данных у вас станет ровно вдвое больше. Это первое. Второе: вам нужно убедиться, что отсчеты вы пишете парно. То есть: отсчет одного канала, отсчет второго и т.д. Далее видно будет.
1
|
3 / 3 / 0
Регистрация: 15.12.2012
Сообщений: 94
|
|
03.09.2015, 12:35 [ТС] | 3 |
если я правильно понял, то мне на вход подаётся по 2 пары двухбайтовых слов, из них я делаю 1 двойное слово (4 байта), а насчёт 2 пункта я не понял
0
|
03.09.2015, 12:47 | 4 | ||||||||||
Добавлено через 26 секунд
1
|
3 / 3 / 0
Регистрация: 15.12.2012
Сообщений: 94
|
||||||
03.09.2015, 12:51 [ТС] | 5 | |||||
а как можно я так сделал
0
|
03.09.2015, 13:45 | 6 |
Скорее всего, что нет. Посмотрите на картинку на всякий случай. Идея в том, чтобы каждый отсчет из моно файла продублировать на второй канал в стерео. Тут еще вот какой момент, что у вас в исходном файле? Сколько бит на отсчет? Если что-то отличное от 16 бит, то по-другому делать надо.
1
|
3 / 3 / 0
Регистрация: 15.12.2012
Сообщений: 94
|
|
03.09.2015, 14:02 [ТС] | 7 |
В исходном файле блоки данных по 16 бит, я их поочерёдно и считываю. Вот откуда я брал информацию http://www.graphicon.ru/oldgr/... avfmt2.htm
Вот этот обзац: " Что же касается формата самих звуковых данных, то он зависит от количества каналов и от дискретности. Для монофонического сигнала с дискретностью 8 бит звуковые данные пред ставляют собой массив однобайтовых значений, каждое из которых является выбор-кой сигнала. Для стереофонического сигнала с дискретностью 8 бит звуковые данных имеют формат массива двухбайтовых слов, причем младший байт слова соответствует левому каналу, а старший - правому. Формат звуковых данных с дискретностью 16 бит выглядит аналогично. Для монофонического сигнала данные хранятся в массиве 16-битовых слов. Для стерео-фонического используется массив двойных слов, причем младшему слову соот-ветствует левый канал, а старшему - правый." Добавлено через 7 минут "Идея в том, чтобы каждый отсчет из моно файла продублировать на второй канал в стерео." -скорее всего нет, у меня в файле исходном уже пары блоков по 16 бит для стерео, их не надо дублировать
0
|
03.09.2015, 14:04 | 8 |
Это все понятно. Вопрос не в этом. Вопрос в том, понимаете ли вы, что записать два подряд 16-битных числа это то же самое что записать 32-битное, сформированное в том же порядке. Это я вот к чему: для простоты и чтобы не мучиться с битовыми операциями, на чтении исходного файла просто пушбэкайте в ваш вектор один отсчет дважды. Потом просто правильно запишите вектор в файл. Дальше видно будет.
Добавлено через 24 секунды ?? Это как?
1
|
3 / 3 / 0
Регистрация: 15.12.2012
Сообщений: 94
|
|||||||||||
03.09.2015, 14:11 [ТС] | 9 | ||||||||||
мне дали raw файл и сказали что надо считывать 16 бит для левого, потом 16 бит для правого, и из них формировать wav файл. Сейчас попробую сделать без битовых операций
Добавлено через 4 минуты Всё равно ошибка вот что получилось wav.cpp
0
|
03.09.2015, 14:18 | 10 |
emmure, а, все, меня переглючило. Я думал у вас только моно файл из которого стерео сделать надо. В качестве лирического отступления: если
ваш исходный файл не содержит ничего помимо озвученного и данные расположены ровно так, то можно вообще тупо в лоб (в смысле в хвост) пристыковать весь файл в секцию данных и радоваться Размер блока только просчитать верно нужно будет.
Добавлено через 5 минут Зачем же вы вектор так насилуете? Пушбэкайте, не инсертьте. Особо не вчитывался, но может вы и в файл его не правильно пишете. Если вам сложновато, попробуйте просто на массиве сделать.
0
|
3 / 3 / 0
Регистрация: 15.12.2012
Сообщений: 94
|
|
03.09.2015, 14:42 [ТС] | 11 |
не мне надо именно попарно считывать, чтобы была возможность не весь файл в wav сделать
Добавлено через 20 минут как вообще узнать что именно в wav файле не так?
0
|
3 / 3 / 0
Регистрация: 15.12.2012
Сообщений: 94
|
||||||
04.09.2015, 22:39 [ТС] | 12 | |||||
По итогу оказалось ошибка в этой строчке
0
|
04.09.2015, 22:39 | |
04.09.2015, 22:39 | |
Помогаю со студенческими работами здесь
12
Как проигрывать .wav файл на страничке при использовании Internet Explorer 9 Создать wav файл имея raw файл с данными При считывании текста из файла, при нахождении пробела или enter ставится пробел Ошибка при считывании Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |