Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/32: Рейтинг темы: голосов - 32, средняя оценка - 4.97
 Аватар для KoFeMaH
38 / 24 / 4
Регистрация: 21.02.2009
Сообщений: 249

Частота выходного звука, с bass.dll

01.12.2010, 10:32. Показов 6971. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кто нибудь работал со звуком?можете поделиться ссылками или инфой как это делается.допустим взять кусок звука обрезать.убрать какие то частоты и т.д.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.12.2010, 10:32
Ответы с готовыми решениями:

Запись звука в С++ Builder с использованием bass.dll
Здравствуйте. Столкнулся с такой проблемой : не могу разобраться с примером на Delphi ( пример прилагающийся к библиотеке bass). Большая...

Запись звука с микрофона С++ Builder c использованием bass.dll
Здравствуйте. Извините что заново поднимаю этот вопрос, но я так и не смог на с++ builder написать программу записывающую звук с микрофона....

Как сделать визуализацию спектра звука? (bass.dll)
Здравствуйте! Пишу для себя небольшой плеер на C++ и BASS, хочу сделать визуализацию(прыгающие полосочки в такт музыки ). Почитал...

16
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
06.12.2010, 13:09
Мне очень нравиться bass.dll, она нереально проста в использовании.
Если хочешь могу подробно рассказать о использовании и кинуть пример моей программы которую можно написать на ней.
Вложения
Тип файла: zip bass24.zip (739.6 Кб, 267 просмотров)
2
0 / 0 / 0
Регистрация: 19.11.2010
Сообщений: 20
07.12.2010, 00:07
Matrica, а можно примерчиков, пожалуйста?
0
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
07.12.2010, 23:59
А как с bass.dll вывести полный спектр звукового файла на объект? Кто же мне поможет??????
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
08.12.2010, 11:53
Лучший ответ Сообщение было отмечено как решение

Решение

Вот, использовал в своей программе:
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
void MUSIC_DrawSpectrum(HSTREAM chan, TPaintBox* pb, TColor SpectrumBGColor, TColor SpectrumPBColor,  bool nosignal=false)
{
float fft[512];
BASS_ChannelGetData(chan, fft, BASS_DATA_FFT1024);
int Step = pb->Width/512;
 
Graphics::TBitmap *bmp = new Graphics::TBitmap();
bmp->Width = pb->Width;
bmp->Height = pb->Height;
bmp->Canvas->Pen->Color=SpectrumBGColor;
bmp->Canvas->Brush->Color=SpectrumBGColor;
bmp->Canvas->Rectangle(0,0,pb->Width,pb->Height);
bmp->Canvas->Pen->Color = SpectrumPBColor;
if (nosignal==false){for (int i = 0; i < 512; i+=Step) {
  fft[i]=fft[i]*1000;
  int hg=pb->Height-fft[i];
  if (hg<0)hg=0;
  //bmp->Canvas->Pen->Color=RGB(0,fft[i],0); ради прикола можно раскоментить =)
  bmp->Canvas->Rectangle(i,pb->Height,i+Step,hg);
}}
Application->ProcessMessages();
if (nosignal==true)
{
bmp->Canvas->Font->Color=clLime;
bmp->Canvas->Font->Size=50;
bmp->Canvas->Font->Name="Comic Sans MS";
bmp->Canvas->TextOutA(pb->Width/2-bmp->Canvas->TextWidth("NO SIGNAL")/2,pb->Height/2-bmp->Canvas->TextHeight("NO SIGNAL")/2,"NO SIGNAL");
}
pb->Canvas->Draw(0,0,bmp);
delete bmp;
bmp = NULL;
}
PaintBox должен быть 512x100

Добавлено через 6 минут
Цитирую справку по bass.dll:
Retrieves the immediate sample data (or an FFT representation of it) of a stream or MOD music channel. Can also be used with a recording channel.

DWORD BASS_ChannelGetData(
DWORD handle,
void *buffer,
DWORD length
);


Parameters
handle The channel handle... a HMUSIC, HSTREAM, or HRECORD.
buffer Pointer to a buffer to receive the data... can be NULL when handle is a recording channel (HRECORD), to discard the requested amount of data from the recording buffer.
length Number of bytes wanted, and/or the following flags.
BASS_DATA_FLOAT Return floating-point sample data.
BASS_DATA_FFT256 256 sample FFT (returns 128 floating-point values).
BASS_DATA_FFT512 512 sample FFT (returns 256 floating-point values).
BASS_DATA_FFT1024 1024 sample FFT (returns 512 floating-point values).
BASS_DATA_FFT2048 2048 sample FFT (returns 1024 floating-point values).
BASS_DATA_FFT4096 4096 sample FFT (returns 2048 floating-point values).
BASS_DATA_FFT8192 8192 sample FFT (returns 4096 floating-point values).
BASS_DATA_FFT16384 16384 sample FFT (returns 8192 floating-point values).
BASS_DATA_FFT_INDIVIDUAL Perform a separate FFT for each channel, rather than a single combined FFT. The size of the data returned (as listed above) is multiplied by the number of channels.

BASS_DATA_FFT_NOWINDOW Prevent a Hann window being applied to the sample data when performing an FFT.
BASS_DATA_FFT_REMOVEDC Remove any DC bias from the sample data when performing an FFT.
BASS_DATA_AVAILABLE Query the amount of data the channel has buffered for playback, or from recording. This flag cannot be used with decoding channels as they do not have playback buffers. buffer is ignored when using this flag.



Return value
If an error occurs, -1 is returned, use BASS_ErrorGetCode to get the error code. When requesting FFT data, the number of bytes read from the channel (to perform the FFT) is returned. When requesting sample data, the number of bytes written to buffer will be returned (not necessarily the same as the number of bytes read when using the BASS_DATA_FLOAT flag). When using the BASS_DATA_AVAILABLE flag, the number of bytes in the channel's buffer is returned.

Error codes
BASS_ERROR_HANDLE handle is not a valid channel.
BASS_ERROR_ENDED The channel has reached the end.
BASS_ERROR_NOTAVAIL The BASS_DATA_AVAILABLE flag was used with a decoding channel.
BASS_ERROR_BUFLOST Should not happen... check that a valid window handle was used with BASS_Init.


Remarks
This function can only return as much data as has been written to the channel's buffer, so it may not always be possible to get the amount of data requested, especially if you request large amounts. If you really do need large amounts, then increase the buffer lengths (BASS_CONFIG_BUFFER). The BASS_DATA_AVAILABLE flag can be used to check how much data a channel's buffer contains at any time, including when stopped or stalled.

When requesting data from a "decoding channel" (BASS_STREAM_DECODE or BASS_MUSIC_DECODE was used at creation), there are no intermediate buffers involved, so as much data as is available can be decoded in one go.

When retrieving sample data, 8-bit samples are unsigned (0 to 255) , 16-bit samples are signed (-32768 to 32767), 32-bit floating-point samples range from -1 to +1 (not clipped, so can actually be outside this range). That is unless the BASS_DATA_FLOAT flag is used, in which case, the sample data will be converted to 32-bit floating-point if it is not already.

When requesting FFT data, only the first half of the FFT result is returned. For example, with a 2048 sample FFT, there will be 1024 floating-point values returned. Each value, or "bin", ranges from 0 to 1 (can actually go higher if the sample data is floating-point and not clipped). The 1st bin contains the DC component, the 2nd contains the amplitude at 1/2048 of the channel's sample rate, then the amplitude at 2/2048, 3/2048, etc. A Hann window is applied to the sample data to reduce leakage, unless the BASS_DATA_FFT_NOWINDOW flag is used. When a window is applied, it causes the DC component to leak into the next bin, but that can be removed (reduced to 0) by using the BASS_DATA_FFT_REMOVEDC flag. Doing so slightly increases the processing required though, so it should only be done when needed, which is when a window is applied and the 2nd bin value is important.

Channels that have 2 or more sample channels (ie. stereo or above) may have FFT performed on each individual channel, using the BASS_DATA_FFT_INDIVIDUAL flag. Without this flag, all of the channels are combined, and a single mono FFT is performed. Performing the extra individual FFTs of course increases the amount of processing required. The return values are interleaved in the same order as the channel's sample data, eg. stereo = left,right,left,etc.

This function is most useful if you wish to visualize (eg. spectrum analyze) the sound.

Example
Get an 1024 sample FFT representation of a playing channel.
C++
1
2
float fft[512]; // fft data buffer
BASS_ChannelGetData(channel, fft, BASS_DATA_FFT1024);
Добавлено через 1 минуту
Особенно мне нравится: This function is most useful if you wish to visualize (eg. spectrum analyze) the sound.
это означает что (дословно): Эта функция является самой полезной, если Вы хотите визуализировать (спектр анализировать) звук.
4
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
08.12.2010, 17:58
Инфа полезная! Но спектр будет рисоватся при проигрывании файла. А как сделать чтоб сначала считался весь спектр звукового файла, потом вывести его на паинт бокс а уж потом проиграть файл.
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
08.12.2010, 19:12
никак...bass.dll не предоставляет такой возможности, жаль =(
(вы можете загрузить музыку и просто промотать её при воспроизведении, но не уверен правильности результата.)
0
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
08.12.2010, 19:49
Хорошо тогда как можно промотать? Я пробовал повышать частоту звука до максимума, вроде получалось, но приходится долго ждать. Если бы частоту можно было задрать до 100000000, тогда промотало бы быстро, а так там вроде до 10000 и все. А есть ли какие либо другие пути решения траблы (не обязательно через басс)?
0
 Аватар для DrSMERTb
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
10.12.2011, 14:18
Цитата Сообщение от Matrica Посмотреть сообщение
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
void MUSIC_DrawSpectrum(HSTREAM chan, TPaintBox* pb, TColor SpectrumBGColor, TColor SpectrumPBColor, bool nosignal=false) {
  float fft[512];
  BASS_ChannelGetData(chan, fft, BASS_DATA_FFT1024);
  int Step = pb->Width/512;
  Graphics::TBitmap *bmp = new Graphics::TBitmap();
  bmp->Width = pb->Width;
  bmp->Height = pb->Height;
  bmp->Canvas->Pen->Color=SpectrumBGColor;
  bmp->Canvas->Brush->Color=SpectrumBGColor;
  bmp->Canvas->Rectangle(0,0,pb->Width,pb->Height);
  bmp->Canvas->Pen->Color = SpectrumPBColor;
  if (nosignal==false){
     for (int i = 0; i < 512; i+=Step) {
       fft[i]=fft[i]*1000;
       int hg=pb->Height-fft[i];
       if (hg<0)hg=0;
         //bmp->Canvas->Pen->Color=RGB(0,fft[i],0);
         // ради прикола можно раскоментить =)
         bmp->Canvas->Rectangle(i,pb->Height,i+Step,hg);
     }
   }
   Application->ProcessMessages();
   if (nosignal==true) {
     bmp->Canvas->Font->Color=clLime;
     bmp->Canvas->Font->Size=50;
     bmp->Canvas->Font->Name="Comic Sans MS";
     bmp->Canvas->TextOutA(pb->Width/2-bmp->Canvas->TextWidth("NO SIGNAL")/2,
                  pb->Height/2-bmp->Canvas->TextHeight("NO SIGNAL")/2,
                  "NO SIGNAL");
   }
   pb->Canvas->Draw(0,0,bmp);
   delete bmp;
   bmp = NULL;
}
Я прописал этот код, сделал PaintBox но ничего не работает....
0
36 / 36 / 8
Регистрация: 10.11.2011
Сообщений: 94
10.12.2011, 22:13
Matrica, неподскажиш что делать пишет что
[Linker Error] Unresolved external 'BASS_ChannelGetData' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\BIN\UNIT1.OBJ


а кстати где путь к файлу прописывать?
0
 Аватар для DrSMERTb
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
11.12.2011, 09:34
Вот такой код по идее должен работать
C++
1
2
3
4
5
6
Graphics::TBitmap *bmp;
bmp = new Graphics::TBitmap();
bmp->LoadFromFile("image.bmp");
bmp->Width = pb->Width;
bmp->Height = pb->Height;
...
P.s. у меня не робит, что нужно ещё изменить?
0
36 / 36 / 8
Регистрация: 10.11.2011
Сообщений: 94
11.12.2011, 09:38
DrSMERTb, мы вроде работаем со звуком, так где звуковой файл открывать?
0
 Аватар для DrSMERTb
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
11.12.2011, 09:39
Ну рисовать тоже чем то нужно...
0
36 / 36 / 8
Регистрация: 10.11.2011
Сообщений: 94
11.12.2011, 09:47
то ли я вас не понял, то ли вы не понимаете меня.

Программа должна по амплитуде звука строить какой-то рисунок, так где эту самую амплитуду будем брать(наверное надо загружать из файла *.mp3, *.wav и т.д.). я не пойму где этот файл надо загрузить.
0
 Аватар для DrSMERTb
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
11.12.2011, 09:49
Я вас понял, просто изначально думал что вас интересует какими изображениями будет строиться тот самый рисунок. Но сейчас понял, что вас именно интересует, тоже ищу ответ на этот вопрос.
0
grey33
09.07.2012, 01:53
народ кто подскажет как получить частоту выходного звук. потока и можно ли это реализовать с bass.dll
я полный "новичек"
 Аватар для T2skler
50 / 50 / 6
Регистрация: 16.05.2012
Сообщений: 232
10.07.2012, 00:55
Цитата Сообщение от Matrica Посмотреть сообщение
никак...bass.dll не предоставляет такой возможности, жаль =(
(вы можете загрузить музыку и просто промотать её при воспроизведении, но не уверен правильности результата.)
Предоставляет, правда не знаю каким образом, но в ZuBy Player это было реализовано. Вывод полной спектрограммы аудио файла с последующим выбором места воспроизведения. Нужно ознакомиться со всеми функциями bass или перевести сорцы ZuBy с дельфи на С++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.07.2012, 00:55
Помогаю со студенческими работами здесь

Куда закинуть bass.dll,bass.h,bass.lib
Ребят, пересмотрел темы на форуме, гуглил, толком ничего не нашел. Собственно такая проблема, вот я скачал архив bass.zip, в нем находится...

Где взять bass.dll bass.lib for win64
Приветствую. Тут много тем было на эти вопросы , но ответа не нашел. Где можно и вообще есть ли bass.dll,bass.lib для Windows 8.1 64...

[Linker Error] 'E:\Programming\C++\BASS.DLL\BASS.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
Народ, подскажите пожалуйста, из-за чего ошибку билдер выбивает?? 'E:\Programming\C++\BASS.DLL\BASS.LIB' contains invalid OMF record,...

Запись звука bass
Как записывать звук с микрофона, используя bass.dll?

bass.dll
Всем привет. Так как гугл не помог мне, обращаюсь к этому форуму=) можете плз привести пример использование bass.dll . Если точнее- то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru