|
84 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 93
|
||||||
Считывание массива семплов из WAV21.06.2015, 01:27. Показов 12687. Ответов 52
Метки нет (Все метки)
Здравствуйте! Такая проблема. Считывается заголовок. Когда пытаюсь считать поле data в массив, чтобы получить значения амплитуд звука получаю segmentation fault. Не могли бы вы написать, как считать сами значения? (в матлабе считывает все стандартная функция и такой проблемы нет)
Пример брала отсюда http://audiocoding.ru/article/... cture.html Мой код
И как проверить там ли записываются данные заголовка, а то при выводе в консоль после RIFF идет адракадабра из символов?
0
|
||||||
| 21.06.2015, 01:27 | |
|
Ответы с готовыми решениями:
52
Считывание и запись Wav Считывание заголовка wav файлов Считывание .wav + изменение частоты дискредитации |
|
163 / 104 / 14
Регистрация: 17.10.2012
Сообщений: 488
|
||
| 25.06.2015, 17:01 | ||
|
0
|
||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
|||
| 25.06.2015, 17:22 | |||
|
0
|
|||
|
84 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 93
|
|
| 25.06.2015, 17:23 [ТС] | |
|
iRomul,
Понятно, но у меня до сих пор вопрос о том, что же пишется в массив? По статье "Рассмотрим самый обычный WAV файл. Он представляет собой две, четко делящиеся, области. Одна из них – заголовок файла, другая – область данных. ... Амплитуда выражается числом, занимаемым в памяти (файле) 8, 16, 24, 32 бит (теоретически можно и больше). Как известно, 8 бит = 1 байту, следовательно, какая-то одна амплитуда в какой-то короткий промежуток времени в памяти (файле) может занимать 1, 2, 3, 4 байта соответственно. Таким образом, чем больше число занимает места в памяти (файле), тем больше диапазон значений для этого числа, а значит и для амплитуды." То есть у меня в области данных должны лежать амплитуды звука в формате от -1 до +1. В массив пишутся числа совсем на это не похожие. Что происходит? P.S. Благодарю за уделенное мне время, а то просто не знала что делать)
0
|
|
|
84 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 93
|
|
| 25.06.2015, 17:30 [ТС] | |
|
vxg,
Запустила сначала ваш, потом свой.
0
|
|
|
84 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 93
|
|
| 25.06.2015, 17:40 [ТС] | |
|
vxg,
В matlab: Y=wavread(FILE) — считывает файл типа WAVE с именем FILE и возвращает данные в массиве Y; К сожалению, не нашла ничего про преобразование или нормировку. Простым запуском этого файла получаем немного округленные значения.
0
|
|
|
84 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 93
|
|
| 25.06.2015, 17:44 [ТС] | |
|
В матлабе использовала всегда 3 вариант, где получаю частоту и бит на отсчет.
Для этого файла FS=22050, bits=16 У меня же получается 44100 и 14
1
|
|
|
84 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 93
|
|||||||||||
| 25.06.2015, 20:13 [ТС] | |||||||||||
|
Нашла пример
Или это не поможет?
0
|
|||||||||||
|
84 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 93
|
|
| 25.06.2015, 20:23 [ТС] | |
|
Поменяла тип uint32 на uint16 - заголовок стал 44 байта, но в массив теперь пишуся нули(
0
|
|
|
163 / 104 / 14
Регистрация: 17.10.2012
Сообщений: 488
|
|
| 25.06.2015, 20:28 | |
|
омг, скиньте тот код, который конкретно в данный момент запускаете.
0
|
|
|
84 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 93
|
|||||||||||
| 25.06.2015, 21:02 [ТС] | |||||||||||
|
vxg, Кстати, запустив ваш код получила как и у себя размер заголовка 52, а не 44
![]() Добавлено через 1 минуту
iRomul, Вот так получила 44 байта заголовка, но массив из 0
Я похоже поняла, что значат значения в массиве (значения от 0 до 255), но не понимаю, как привести их к виду матлаба. Теперь, что касается амплитуды (громкости звука в коротком промежутке времени). От нее, я бы сказал, зависит точность звука. Амплитуда выражается числом, занимаемым в памяти (файле) 8, 16, 24, 32 бит (теоретически можно и больше). Как известно, 8 бит = 1 байту, следовательно, какая-то одна амплитуда в какой-то короткий промежуток времени в памяти (файле) может занимать 1, 2, 3, 4 байта соответственно. Таким образом, чем больше число занимает места в памяти (файле), тем больше диапазон значений для этого числа, а значит и для амплитуды. 1 байт – 0..255 2 байта – 0..65 535 3 байта – 0..16 777 216 4 байта – 0..4 294 967 296 В моно варианте значения амплитуды расположены последовательно.
0
|
|||||||||||
|
84 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 93
|
|
| 25.06.2015, 22:21 [ТС] | |
|
iRomul,
Разобралась с 44 байтами. Но похоже в заголовке перед DATA еще идут поля LIST и INFO с INAM. Пытаюсь пропустить их но никак не могу попасть на DATA. В массив начал писаться какие-то значения.
0
|
|
|
84 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 93
|
|
| 26.06.2015, 00:13 [ТС] | |
|
Дошла до чанка с data. Записывается массив значений в виде "числа, занимаемым в памяти бит" в пределах 2 бит.
Как можно получить амплитуды, которые дает матлаб, если здесь 65 000 а надо в пределах +-1?
0
|
|
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
|||
| 26.06.2015, 10:17 | |||
|
1 - отнимите от всех значений (2^16 - 1) / 2, приведите к float и поделите на 2^16 2 - найдите мин и макс значение, отнимите от всех значений мин + (макс + мин) / 2, приведите к float и поделите на (макс - мин)
0
|
|||
|
84 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 93
|
|
| 27.06.2015, 11:25 [ТС] | |
|
1) не помогло впринципе (пробовала и для инта 2^31-2 так как тип массива указала int32_t)
2) нормировало примерно к одному десятичному числу, а матлаб показывает совсем другое -0,00137329101562500 -0,00244140625000000 -0,00198364257812500 -0,00140380859375000 -0,00186157226562500 -0,00250244140625000 -0,00256347656250000 -0,00198364257812500 -0,00122070312500000 -0,00189208984375000 -0,00167846679687500 -0,00198364257812500 -0,00186157226562500 -0,00140380859375000 -0,00125122070312500 -0,00137329101562500 -0,000549316406250000 Может надо преобразовывать с помощью частоты? " Звук состоит из колебаний, которые при оцифровке приобретают ступенчатый вид. Этот вид обусловлен тем, что компьютер может воспроизводить в любой короткий промежуток времени звук определенной амплитуды (громкости) и этот короткий момент далеко не бесконечно короткий. Продолжительность этого промежутка и определяет частота дискретизации. Например, у нас файл с частотой дискретизации 44.1 kHz, это значит, что тот короткий промежуток времени равен 1/44100 секунды (следует из размерности величины Гц = 1/с). Современные звуковые карты поддерживают частоту дискретизации до 192 kHz. Так, со временем разобрались. Теперь, что касается амплитуды (громкости звука в коротком промежутке времени). От нее, я бы сказал, зависит точность звука. Амплитуда выражается числом, занимаемым в памяти (файле) 8, 16, 24, 32 бит (теоретически можно и больше). Как известно, 8 бит = 1 байту, следовательно, какая-то одна амплитуда в какой-то короткий промежуток времени в памяти (файле) может занимать 1, 2, 3, 4 байта соответственно. Таким образом, чем больше число занимает места в памяти (файле), тем больше диапазон значений для этого числа, а значит и для амплитуды. 1 байт – 0..255 2 байта – 0..65 535"
0
|
|
|
84 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 93
|
|
| 27.06.2015, 12:11 [ТС] | |
|
Эти варианты не помогли
0
|
|
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||
| 29.06.2015, 13:55 | ||
|
не могли бы вы выложить тестовый файл и ту последовательность которую дает матлаб для этого файла
0
|
||
|
84 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 93
|
|
| 29.06.2015, 16:13 [ТС] | |
|
vxg, результаты и матлаб файл
0
|
|
|
84 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 93
|
||||||
| 29.06.2015, 16:31 [ТС] | ||||||
|
vxg, wav файл
Добавлено через 17 минут Нашла пример, но такое деление тоже не дает результата. + еще не подключается сторонняя библиотека
0
|
||||||
|
84 / 4 / 0
Регистрация: 01.02.2012
Сообщений: 93
|
|
| 29.06.2015, 16:46 [ТС] | |
|
vxg,
0
|
|
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||||||||||||
| 01.07.2015, 13:27 | ||||||||||||
|
-берем "нормальное значение" (0..0xFFFF) -преобразуем его к типу double -отнимаем 0x8000 - то есть теперь наш ноль будет в центре диапазона (внизу будет 0x8000 штук отрицательных значений, вверху будет 0x8000 штук положительных значений, причем нулевые значения считаются положительными) - то есть теперь мы будем иметь значения в диапазоне [-0x8000, 0x8000) или, что тоже самое [-0x8000, 0x7FFF] -делим на 0x8000 - то есть теперь мы будем иметь значения в диапазоне [-1, +1) -А ТЕПЕРЬ РОК-Н-РОЛЛ - полученное значение matlab преобразует очень странным методом. каким именно мне неизвестно, но результат работы такой же как если бы мы сделали следующее: если значение больше нуля, то результат будет равен значение минус один, если значение меньше нуля, то результат будет равен значение плюс один. как будто мы берем не амплитуду, а значение которое нужно добавить к амплитуде что бы она стала равной единице. зачем? вообще не знаю. можете написать разработчикам matlab. беглый поиск вообще говорит, что значения должны быть нормированы к диапазону [-1, +1). кроме того по этой же ссылке мы видим, что значения могут быть загружены в "нормальном" виде (0..0xFFFF) если использовать выражение вида
вот собственно код
0
|
||||||||||||
| 01.07.2015, 13:27 | |
|
Запись и считывание информации в WAV-файл Нужна помощь в заказе семплов(Coilcraft). Оплата. Написать программу, формирующую по исходному WAV файлу новый WAV файл Применить фильтр который будет брать первые 5 семплов, считать среднее и записывать в другой массив Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|