Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

как в с++builder на рисовать звуковую волну

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> как в с++builder на рисовать звуковую волну
Имя
Сообщение << Старые топики   Новые топики >>
как в с++builder на рисовать звуковую волну - 2009-10-17 13:05:41.526666   
dddmitriyy

Сообщений: 12
Оценки: 0
Присоединился: 2008-01-09 09:14:42.636666
как в с++builder на рисовать звуковую волну wav файла как аудиредакторах
Post #: 1
RE: как в с++builder на рисовать звуковую волну - 2009-10-17 15:30:02.996666   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
в простейшем цифровом представлении, звуковая волна - это нормированное упорядоченное по времени множество значений отклонения мембраны относительно состояния спокойствия (тишины), т.е. для каждого момента времени (его размер определяется частотой дискретизации) имеем некоторое значение в диапазоне (-1.0, 1.0). если не заморачиваться с масштабом и прочими полезными вещами, достаточно просто на каждую координату оси абсцисс выводить по точке, ордината которой будет равна -(высота виджета / 2) * (1.0 + (значение из множества))
Post #: 2
RE: как в с++builder на рисовать звуковую волну - 2009-10-17 17:25:00.996666   
dddmitriyy

Сообщений: 12
Оценки: 0
Присоединился: 2008-01-09 09:14:42.636666
а как именно если можно то кокретный пример
Post #: 3
RE: как в с++builder на рисовать звуковую волну - 2009-10-17 17:54:21.986666   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: dddmitriyy

а как именно если можно то кокретный пример


нельзя

http://www.mega-nerd.com/libsndfile/

http://www.functionx.com/bcb/gdi/gdiexamples.htm
http://www.cyberforum.ru/cpp-builder/thread50759.html

берёшь libsndfile, или любой аналог (по ссылке есть документация), вычитываешь данные из wav-файла, рисуешь на canvas'е. имей в виду, что шкала значений для данных может быть не линейной, а логарифмической (это если в децибелах), в таком случае есть смысл произвести преобразование
Post #: 4
RE: как в с++builder на рисовать звуковую волну - 2009-10-17 21:06:40.226666   
ХреновыйСтудент

Сообщений: 100
Оценки: 0
Присоединился: 2009-06-30 18:30:40.363333
quote:

для каждого момента времени (его размер определяется частотой дискретизации) имеем некоторое значение в диапазоне (-1.0, 1.0)

а как определить это значение? я так понимаю шагом квантования?
по сути оно должно определяться ацп или требуемым качеством и подгоняться под степень двойки. 32 бита каждое значение?
Post #: 5
RE: как в с++builder на рисовать звуковую волну - 2009-10-19 11:31:44.326666   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: ХреновыйСтудент

а как определить это значение? я так понимаю шагом квантования?


которое из? если в контексте задачи, то в wav-файле оно уже хранится - с учётом метаданных о частоте дискретизации по времени и по значению; остаётся только вычитать

quote:

ORIGINAL: ХреновыйСтудент

по сути оно должно определяться ацп


во время записи - да. wav - это уже оцифрованные данные, это не аналоговый сигнал
Post #: 6
RE: как в с++builder на рисовать звуковую волну - 2009-10-19 18:46:32.650000   
ХреновыйСтудент

Сообщений: 100
Оценки: 0
Присоединился: 2009-06-30 18:30:40.363333
quote:

wav - это уже оцифрованные данные, это не аналоговый сигнал

это понятно)

quote:

с учётом метаданных о частоте дискретизации по времени и по значению

частота дискретизации определяет качество сигнала, его спектр. шаг квантования определяет сколько битов будет описывать каждое значение спектра. Так вот вопрос в том, как определять количество битов.
В mp3 есть фреймы, в которых это дело описывается. id3 теги вроде называются.
В WAV, я так понимаю из вашего поста, тот же принцип, только форма отображения методанных другая.
В midi вроде отдельно инструменты описываются, но не уверен.

понимаю что есть гугл, но лень же :(
Post #: 7
RE: как в с++builder на рисовать звуковую волну - 2009-10-19 20:32:29.736666   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: ХреновыйСтудент


В WAV, я так понимаю из вашего поста, тот же принцип, только форма отображения методанных другая.


http://www.mega-nerd.com/libsndfile/api.html#open

это если с практической точки зрения

http://www.sonicspot.com/guide/wavefiles.html

а это - если тебя интересует структура M$ WAV. ну и:

quote:

The standard audio file format for CDs, for example, is LPCM-encoded, containing two channels of 44,100 samples per second, 16 bits per sample


хотя бывают и исключения
Post #: 8
RE: как в с++builder на рисовать звуковую волну - 2009-10-19 21:24:06.143333   
ХреновыйСтудент

Сообщений: 100
Оценки: 0
Присоединился: 2009-06-30 18:30:40.363333
библиотеку посмотрел. круто.
ок, вторая сцыль кстати битая)

quote:

16 bits per sample

нормально так.
(16 . 65536) т.е.

quote:

Regardless of whether data in the file is 8, 16, 24 or 32 bit wide, the data will be read as floating point data in the range [-1.0, 1.0].

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


Post #: 9
RE: как в с++builder на рисовать звуковую волну - 2009-10-19 21:30:19.733333   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: ХреновыйСтудент

ок, вторая сцыль кстати битая)


работает

quote:

ORIGINAL: ХреновыйСтудент

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


floating point value != float. ну и да, если тебе нужно иначе (а зачем?) можно воспользовать более специализированными библиотеками (или написать свою - для одного формата несжатого wav это будет несложно)
Post #: 10
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> как в с++builder на рисовать звуковую волну







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.