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

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

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

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

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

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

К сожалению я даже не новичок, а начинающий в с++, более менее умею только плагины на SourcePawn писать для CS.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2016, 22:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как взять громкость звукового файла в определенный момент времени? (C++):

Определение времени подачи звукового сигнала - C++
Помогите пожалуйста. Таймер — это часы, которые умеют подавать звуковой сигнал по прошествии некоторого периода времени. Напишите...

Работа со звуком (как звуковые спектры определённого звукового файла записать цифрами в массив) - C++
как звуковые спектры определённого звукового файла записать цифрами в массив.

Цикл: Выйти в любой момент времени из цикла while нажатием определённой кнопки. Как реализовать? - C++
Необходимо выйти в любой момент времени из цикла while нажатием определённой кнопки. Как реализовать?

Как из FB2 файла взять картинку - C++
Пишу научную работу. Тема конвертер текстовых форматов. Вот пишу конвертер ФБ2. Не пойму как из ФБ2 файла взять картинку, или как найти...

Получение информации о частоте и длительности из звукового файла. - C++
Нужно получить информацию ТОЛЬКО о частотах и длительностях звукового файла. Откуда такую инфу проще достать? Мне кажется, что из PCM или...

Как взять данные из файла и сохранить в файл? - C++
День добрый. Подскажите, как взять данные из файла и как сохранить данные в файл. Желательно на примере графа. Спасибо!

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
04.05.2016, 07:10 #2
Что ты называешь громкостью? Там только амплитуда есть.
1
SHAREN
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 13
04.05.2016, 15:08  [ТС] #3
Громкостью называю величину отклонения волны от нуля, в модуле.

Добавлено через 20 минут
Значения громкости нужны для плагина визуализации звука (цветомузыка) на сервере c Sourcemod.
В самом SourceMod я не нашел как можно взять звуковые спектры из звукового файла.
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
04.05.2016, 15:48 #4
Формат файла какой? Читай описание формата.
1
SHAREN
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 13
04.05.2016, 15:51  [ТС] #5
*.mp3 41000 hz mono
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
04.05.2016, 15:56 #6
Тогда какую-то библиотеку надо, которая раскодирует mp3. Что за Sourcemod? Как это связано с C++? Может там свои средства?
1
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)
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
04.05.2016, 18:35 #8
И как ты хочешь прикручивать это к Sourcemod? Там не C++.
1
SHAREN
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 13
04.05.2016, 20:48  [ТС] #9
На первое время буду для каждого трека сохранять txt файл рядом со звуком, в момент проигрывания данные с txt файла будут записываться в массив и во время воспроизведения каждый tick будут меняться значения яркости, размеров и скорости ентити объектов (свет, спрайты).

А вообще можно писать расширения *.ext на c++, но этого я пока что не умею.
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
04.05.2016, 22:25 #10
Сомнительно, что удастся добиться синхронизации.
1
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. даже если и считаете это бесполезным, то просто помогите, мне сейчас главное разобраться, я только начал учить язык и любая работа будет на пользу.
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
07.05.2016, 22:14 #12
Там с BASS_Init() надо вроде бы начинать. Тип проекта верно выбран? Версия VS какая?
1
SHAREN
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 13
08.05.2016, 21:27  [ТС] #13
Консольное приложение, VS2015

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

Кто-нибудь пробовал компилировать мой код? Библиотеку брал отсюда
0
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
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
10.05.2016, 22:07 #15
Буфер (fft) маленький. Сделай 1024.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2016, 22:07
Привет! Вот еще темы с ответами:

Как создать калькулятор, и взять из внешнего файла значения - C++
добрый вечер уважаемые у меня возник вопрос как создать калькулятор на с++ и при этом не вписывать значения в консоль а брать значения из...

Послать сообщение окну в указанный момент времени - C++
Здравия желаю! Вот сижу, в носу ковыряюсь от скуки — задел извилину. Интересно стало: как можно без цикла проверки системного...

Создание таймер с остановкой в определенный период времени - C++
Всем Привет! Мне нужно написать программу-таймер, которая будет выводить пользователю сообщение каждые 5 минут. Тоесть нажал кнопку,...

Получить значение амплитуды аудио в заданный момент времени - C++
Здравствуйте. Использую библиотеку SFML для создания игры и возник вопрос: В игре будут находиться объекты, размер и поведение которых...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.05.2016, 22:07
Ответ Создать тему
Опции темы

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