Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
SHAREN
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 13
#1

Как взять громкость звукового файла в определенный момент времени? - C++

03.05.2016, 22:47. Просмотров 556. Ответов 22
Метки нет (Все метки)

Хочу сделать простую программку которая будет выводить 2 значения. 1 - громкость, 2 - тик
пример^
0.56 00000
0.47 00001
0.32 00002
0.39 00003
...
0.96 04324
0.88 04325

К сожалению я даже не новичок, а начинающий в с++, более менее умею только плагины на SourcePawn писать для CS.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2016, 22:47     Как взять громкость звукового файла в определенный момент времени?
Посмотрите здесь:
C++ Определение времени подачи звукового сигнала
C++ Работа со звуком (как звуковые спектры определённого звукового файла записать цифрами в массив)
Как из FB2 файла взять картинку C++
Получение информации о частоте и длительности из звукового файла. C++
C++ Как взять данные из файла и сохранить в файл?
C++ Как создать калькулятор, и взять из внешнего файла значения
C++ Послать сообщение окну в указанный момент времени
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
5253 / 4573 / 1535
Регистрация: 14.04.2014
Сообщений: 18,189
04.05.2016, 07:10     Как взять громкость звукового файла в определенный момент времени? #2
Что ты называешь громкостью? Там только амплитуда есть.
SHAREN
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 13
04.05.2016, 15:08  [ТС]     Как взять громкость звукового файла в определенный момент времени? #3
Громкостью называю величину отклонения волны от нуля, в модуле.

Добавлено через 20 минут
Значения громкости нужны для плагина визуализации звука (цветомузыка) на сервере c Sourcemod.
В самом SourceMod я не нашел как можно взять звуковые спектры из звукового файла.
nmcf
5253 / 4573 / 1535
Регистрация: 14.04.2014
Сообщений: 18,189
04.05.2016, 15:48     Как взять громкость звукового файла в определенный момент времени? #4
Формат файла какой? Читай описание формата.
SHAREN
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 13
04.05.2016, 15:51  [ТС]     Как взять громкость звукового файла в определенный момент времени? #5
*.mp3 41000 hz mono
nmcf
5253 / 4573 / 1535
Регистрация: 14.04.2014
Сообщений: 18,189
04.05.2016, 15:56     Как взять громкость звукового файла в определенный момент времени? #6
Тогда какую-то библиотеку надо, которая раскодирует mp3. Что за Sourcemod? Как это связано с C++? Может там свои средства?
SHAREN
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 13
04.05.2016, 16:13  [ТС]     Как взять громкость звукового файла в определенный момент времени? #7
Про СМ http://hlmod.ru/threads/vvedenie-v-s...mirovanie.257/

Пока что пробую подключить библиотеку bass.h (и с этим у меня небольшие проблемы )
Потом хочу сделать так :
C++
1
2
    float fft[512]; // fft data buffer
    BASS_ChannelGetData(channel,fft,BASS_DATA_FFT1024);
Добавлено через 12 минут
http://www.un4seen.com/doc/#bass/BAS...elGetData.html

Если использовать BASS_ChannelGetData то нужно как-то взять DWORD handle, т.е. это поток как я понял
void *buffer это fft[512]
DWORD length это sizeof(fft)
nmcf
5253 / 4573 / 1535
Регистрация: 14.04.2014
Сообщений: 18,189
04.05.2016, 18:35     Как взять громкость звукового файла в определенный момент времени? #8
И как ты хочешь прикручивать это к Sourcemod? Там не C++.
SHAREN
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 13
04.05.2016, 20:48  [ТС]     Как взять громкость звукового файла в определенный момент времени? #9
На первое время буду для каждого трека сохранять txt файл рядом со звуком, в момент проигрывания данные с txt файла будут записываться в массив и во время воспроизведения каждый tick будут меняться значения яркости, размеров и скорости ентити объектов (свет, спрайты).

А вообще можно писать расширения *.ext на c++, но этого я пока что не умею.
nmcf
5253 / 4573 / 1535
Регистрация: 14.04.2014
Сообщений: 18,189
04.05.2016, 22:25     Как взять громкость звукового файла в определенный момент времени? #10
Сомнительно, что удастся добиться синхронизации.
SHAREN
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 13
04.05.2016, 23:18  [ТС]     Как взять громкость звукового файла в определенный момент времени? #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stdafx.h"
#include "bass.h"
 
 
int main()
{
    HSTREAM channel;
    channel = BASS_StreamCreateFile(false,"banana.mp3", 0, 0, 0);
    if (channel != NULL) {
        float fft[512];                         // fft data buffer
        BASS_ChannelGetData(channel,fft,BASS_DATA_FFT1024);
        for (int i=0; i<sizeof(fft); i++)
            printf("%.2f \n",fft[i]);
    } else printf("channel = 0 \n");
 
 
    system("pause");
    return 0;
}
Пишет всегда "channel = 0"

А после выполнения программы выползает это:
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
P.S. даже если и считаете это бесполезным, то просто помогите, мне сейчас главное разобраться, я только начал учить язык и любая работа будет на пользу.
nmcf
5253 / 4573 / 1535
Регистрация: 14.04.2014
Сообщений: 18,189
07.05.2016, 22:14     Как взять громкость звукового файла в определенный момент времени? #12
Там с BASS_Init() надо вроде бы начинать. Тип проекта верно выбран? Версия VS какая?
SHAREN
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 13
08.05.2016, 21:27  [ТС]     Как взять громкость звукового файла в определенный момент времени? #13
Консольное приложение, VS2015

Добавлено через 22 часа 46 минут
nmcf,
BASS_Init() если я не ошибаюсь служит для взятия звука с девайса.
А мне нужно с файла.

Кто-нибудь пробовал компилировать мой код? Библиотеку брал отсюда
SHAREN
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 13
10.05.2016, 18:05  [ТС]     Как взять громкость звукового файла в определенный момент времени? #14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stdafx.h"
#include "bass.h"
 
 
int main()
{
    printf("BASS_Init %i \n",BASS_Init(-1,44100,0,0,0));
    HSTREAM channel = BASS_StreamCreateFile(false,"D:/banana.mp3",0,0,0);
    printf("channel == %i \n",channel);
    float fft[512];                         // fft data buffer
    printf("BASS_ChannelGetData %i \n",BASS_ChannelGetData(channel,fft,BASS_DATA_FFT2048));
    
    //for (int i=0; i<sizeof(fft); i++)
    //  printf("%.2f \n",fft[i]);
    printf("BASS_ErrorCode %i \n", BASS_ErrorGetCode());
    
    system("pause");
    return 0;
}
Вывод
Код
BASS_Init 1
channel == 1610612737
BASS_ChannelGetData -1
BASS_ErrorCode 24
Для продолжения нажмите любую клавишу . . .
После нажатия выходит
Код
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.  This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
Добавлено через 2 часа 3 минуты
P.S. BASS_ErrorCode 24 это BASS_ERROR_NOPLAY
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2016, 22:07     Как взять громкость звукового файла в определенный момент времени?
Еще ссылки по теме:
Создание таймер с остановкой в определенный период времени C++
Получить значение амплитуды аудио в заданный момент времени C++
C++ Определение скорости движения автомобиля по прямой в каждый момент времени
C++ Вычислить момент времени когда расстояние между лидирующим и замыкающим велосипедистами будет минимальным
как изменить системную громкость ? C++

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

Или воспользуйтесь поиском по форуму:
nmcf
5253 / 4573 / 1535
Регистрация: 14.04.2014
Сообщений: 18,189
10.05.2016, 22:07     Как взять громкость звукового файла в определенный момент времени? #15
Буфер (fft) маленький. Сделай 1024.
Yandex
Объявления
10.05.2016, 22:07     Как взять громкость звукового файла в определенный момент времени?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru