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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Массив структур с данными о клиентах банка http://www.cyberforum.ru/cpp-beginners/thread1727080.html
Ребята, помогите разобраться в структурах. Есть задание, нужно сформировать массив структур с данными о клиентах банка : дата проведения операции , № счета , сумма безналичного получения \ перевода , получено \ выдано наличными , остаток вклада. Вывести на экран формв таблицы данные о клиентах банка, в течение заданного периода времени имеют наибольшую сумму безналичного получения средств на счет
C++ Как ввести строку с пробелами char s1; char s2; int a; cin.getline(s1,50); cin>>a; cin.getline(s2,50); Не вводит вторую строку. http://www.cyberforum.ru/cpp-beginners/thread1727076.html
Экспортирование inline-функций в MinGW компиляторе C++
Здравствуйте. Как заставить MinGW компилятор (в моем случае MinGW 4.9.2 x32) экспортировать inline-функции и функции-члены классов в библиотеку? Он попросту их пропускает. В случае MSVC - все наоборот. Он их спокойно добавляет в либку и их там видно и в dll-ке они тоже появляются. После MinGW в *.a файлах имен этих функций попросту нет. Например: // func.h - объявление namespace...
C++ Задачу создать 2-мя способами:1) передавать результат работы подпрограммы через результат, возвращаемый функци
Здравствуйте, дорогие форумчане! Будьте добры, помогите не совсем опытному юзеру разобраться с небольшим непониманием : дано условие (см. ниже) нужно решить именно этими методами, честно, не совсем понимаю, что от меня требуется, гугл тоже не очень сильно помог. Условие : Заданные три массива. Расположить в порядке увеличения три числа, которые являются мнимальный элементами массивов...
C++ Вложенные циклы http://www.cyberforum.ru/cpp-beginners/thread1727016.html
Есть два цикла, один вложенный. for(int i=0; i<N;i++) { for(int j=0; j<M;j++) { A=... } }
C++ Записи.Расписание поездов Известно расписание поездов, проходящих через станцию: номер поезда, назначение (откуда — куда, например, «Москва — Омск»), часы и минуты прибытия, часы и минуты отправления. Значения часов и минут целые величины; число часов не превышает 23, число минут — 59. Общее число проходящих поездов равно 25. Поезда приходят каждый день. По данному времени определить, какие поезда (номер и назначение)... подробнее

Показать сообщение отдельно
SHAREN
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/hi1/c...s/image004.jpg, для каждой "плоскости" нужно брать BASS_ChannelGetData
Вложения
Тип файла: rar 9.rar (268.1 Кб, 2 просмотров)
 
Текущее время: 09:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru