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

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

01.12.2010, 10:32. Показов 6923. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru