Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 13

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

03.05.2016, 22:47. Показов 1945. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.05.2016, 22:47
Ответы с готовыми решениями:

Telegram bot: как отправлять сообщения пользователю в определённый момент времени?
Как отправлять сообщения пользователю, в определённый момент времени?

При получении сигнала, как я могу его изменить в определенный момент времени
Доброго времени суток, при получении сигнала, как я могу его изменить в определенный момент времени? y(t) = x К примеру y(1) = 20,...

Запуск функции в определенный момент времени
Всем добрый вечер. Я совсем новичек в Java и у меня возник вопрос. Как правельно запустить определенную функцию и определенный момент...

22
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
10.05.2016, 23:29
Студворк — интернет-сервис помощи студентам
И в чём было дело?
0
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 13
11.05.2016, 19:16  [ТС]
Честно сказать я просто вставил готовый код.
Оказывается BASS_ChannelGetData берет массив значений в 1 момент времени, а в массив записываются данный начиная с низких частот заканчивая высокими (как в эквалайзере).
А чтобы взять громкость из другого момента времени нужно в цикле менять позиции:
C++
1
2
3
4
        long byte_pos = BASS_ChannelSeconds2Bytes(chan, time);
        BASS_ChannelSetPosition(chan, byte_pos, BASS_POS_BYTE);
        ...
        time += 1 / fps;   //increment time
В общем в самом исходном коде можно прописать
C++
1
2
3
4
char *output_name = "OUTPUT.txt";       // куда запишутся все значения
char *input_name = "INPUT.mp3";             // из какого файла брать значения
double fps = 60;                        // сколько раз в сек. брать спектр
int BANDS = 120;                        // ширина спектра
P.S. а BASS_ERROR_NOPLAY было из-за того что я bass.dll рядом с *.ехе не закинул.
0
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 13
12.05.2016, 03:25  [ТС]
Ещё одна проблема, некоторые файлы записываются нормально а некоторые наполовину с нулями.

К примеру в архиве 2 файла, banana.mp3 пишется нормально, 9.mp3 наполовину заполняется нулями.

Так же в 9.mp3 пики намного больше чем в banana.mp3

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
using namespace std;
#include <bass.h>
 
FILE *output_data;
char *output_name = "D:/1.txt";
char *input_name = "D:/9.mp3";
 
//using System;
int main()
{
    DWORD chan,p;
    QWORD pos;
    fopen_s(&output_data,output_name,"w");
 
    BASS_SetConfig(BASS_CONFIG_UPDATEPERIOD,0);         // no audio output, therefore no update period needed
    BASS_Init(0,44100,0,0,NULL);                        // null device, 44100hz, stereo, 16 bits
    chan = BASS_StreamCreateFile(FALSE,input_name,0,0,BASS_SAMPLE_MONO|BASS_STREAM_DECODE);     //streaming the file
 
    pos = BASS_ChannelGetLength(chan,BASS_POS_BYTE);    // вес файла
    printf("streaming file [%llu bytes]",pos);
 
    p = (DWORD)BASS_ChannelBytes2Seconds(chan,pos);
    printf(" %u:%02u\n", p / 60, p % 60);           // длительность файла в сек
 
 
    long byte_pos = 0;
    long byte_pos_ =0;
    int n = 50;             // шаг Hz
    long interval = BASS_ChannelSeconds2Bytes(chan, .1f);       // интервал в секундах
    printf("interval %i \n", interval);
    float peak2 = 0;
 
    while (BASS_ChannelIsActive(chan)) {
        if (byte_pos+interval >= pos)
            break;
        //long byte_pos = BASS_ChannelSeconds2Bytes(chan,fTime);
        BASS_ChannelSetPosition(chan,byte_pos+=n,BASS_POS_BYTE);
        #define SIZE 512
        float fft[SIZE];            // спектр
        BASS_ChannelGetData(chan,fft,BASS_DATA_FFT1024);  //get the fft data, in this case there are 2048 samples
                                                          //binning the fft, modified from bass spectum.c example in sdk.
 
            
            float peak = 0;
            for (int i=0; i < SIZE-1; i++) {
                if (peak < fft[1+i]) {
                    peak = fft[1+i];            // ищем самое большое значение peak на одном спектре
                    //printf("%.0f ", sqrt(peak)*255);
 
                } //printf("%.0f ", sqrt(fft[1+i])*255);
            } //printf("%i %f \n",byte_pos, peak);
                if (BASS_ErrorGetCode())
                    printf("\n%i ERROR %i\n",byte_pos,BASS_ErrorGetCode());
            if (peak2 < peak) {
                peak2=peak;
            }
            //write each column to file
            //fprintf(output_data,"%.0f",sqrt(peak)*255);
        //}
        //endline after every row
        //fprintf(output_data,"\n");
        //pos = BASS_ChannelGetPosition(chan,BASS_POS_BYTE);
        //p = (DWORD)BASS_ChannelBytes2Seconds(chan,pos);
        if (byte_pos_ >= interval) {
            byte_pos_ = 0;
            printf("%i %f \n",byte_pos ,peak2*5);
            fprintf(output_data,"%.0f\n",peak2*5*255);
            peak2=0;
        }
        byte_pos_+=n;
    }
    if(BASS_ErrorGetCode())
        printf("\nERROR %i\n", BASS_ErrorGetCode());
    printf("\nDONE!\n");
    fclose(output_data);
    BASS_Free();
 
    system("pause");
 
    return 0;
}

P.S. а так например с banana.mp3 и другими несколькими файлами на сервере все синхронно визуализировалось, осталось только разобраться с этой проблемой.

а в некоторых других файлах пишет с промежутками, т.е. то идут нули, то файл нормально пишется.

P.P.S.
Вот пример разложенного звукового спектра.http://www.frolov-lib.ru/books... age004.jpg, для каждой "плоскости" нужно брать BASS_ChannelGetData
Вложения
Тип файла: rar 9.rar (268.1 Кб, 3 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.05.2016, 03:25

Переключение графиков в определённый момент времени
Как переключить график с одной схемы на другую в нужный момент времени? Нужно получить график манёвра летательного аппарата. Первая схема-...

Вывести длину змейки в определенный момент времени
Создал свою змейку и хочу чтобы когда она сама в себя врезалась на экран выводилась ее длинна, но не знаю как это сделать.Заранее спасибо!)

Снятие атрибутов с файла через определенный промежуток времени от времени запуска bat файла
Подскажите, может есть идеи как организовать такую задачу? Есть каталог с вложенными каталогами, во вложенных каталогах периодически...

Получить числовое значение тактовой частоты процессора в определенный момент времени
Доброго времени суток. Подскажите можно ли как то получить числовое значение тактовой частоты процессора в определенный момент времени?...

Графика. получить на экране прямую линию,которая движется и в каждый определенный момент времени является касательной к кругу с заданым радиусом
получить на экране прямую линию,которая движется и в каждый определенный момент времени является касательной к кругу с заданым...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru