Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
45 / 39 / 24
Регистрация: 29.11.2013
Сообщений: 145

Gstreamer, как получить уровень/пик громкости?

01.12.2014, 21:46. Показов 2459. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как получить пики громкости на подобии функции BASS_ChannelGetLevel в bass.dll
Кликните здесь для просмотра всего текста

Python
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
from os import path
 
import gi
gi.require_version('Gst', '1.0')
from gi.repository import GObject, Gst, Gtk
 
GObject.threads_init()
Gst.init(None)
 
filename = path.join(path.dirname(path.abspath(__file__)), 'my.flac')
uri = 'file://' + filename
#uri = 'http://icecast.omroep.nl:80/radio1-bb-mp3'
 
class Player(object):
    def __init__(self):
 
        # Создание GStreamer pipeline
        self.pipeline = Gst.Pipeline()
 
        # Получение событий на шине для GStreamer pipeline
        self.bus = self.pipeline.get_bus()
        self.bus.add_signal_watch()
        self.bus.connect('message::error', self.on_error)
 
        # Создание элементов GStreamer
        self.playbin = Gst.ElementFactory.make('playbin', 'Multimedia Player')
 
        #volume element to adjust volume of audio
        self.volume = Gst.ElementFactory.make('volume', 'volume')
 
        #level element to get the rms/peak property
        self.level = Gst.ElementFactory.make('level', 'volume-level')
 
        # Добавление playbin в pipeline
        self.pipeline.add(self.playbin)
 
        # Установка параметров
        self.playbin.set_property('uri', uri)
        self.pipeline.set_state(Gst.State.PLAYING)
 
    #   Обработка ошибок
    def on_error(self, bus, msg):
        print('on_error():', msg.parse_error())
 
    #def get_v_send(self):
        #print(self.level.get_level())
 
    #   Изменение громкости
    def on_file_selected(self, value=''):
        self.playbin.set_property('volume', float(value))
        return True
 
p = Player()
p
while True:
    if input('') == 's':
        exit()
    elif input('') == 'v':
        p.get_v_send()
    elif input('') == 'p':
        print('Input vol')
        p.on_file_selected(input(''))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.12.2014, 21:46
Ответы с готовыми решениями:

Как получить уровень громкости звука?
Как получить уровень громкости звука(использую android studio)?

Как получить уровень громкости на Android
Как определить включен или выключен звук на Android?

Как быстро получить максимальный уровень громкости MP3 файла
Друзья, подскажите пожалуйста, как быстро узнать максимальный уровень громкости MP3 файла? Мне это нужно для реализации функции...

2
45 / 39 / 24
Регистрация: 29.11.2013
Сообщений: 145
04.12.2014, 21:46  [ТС]
Еще немного продвинулся. Но пока желаемого результата не добился:
Python
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
from os import path
 
import time
 
import gi
gi.require_version('Gst', '1.0')
from gi.repository import GObject, Gst, Gtk, GLib, GstAudio
 
GObject.threads_init()
Gst.init(None)
 
uri = 'http://icecast.omroep.nl:80/radio1-bb-mp3'
 
class MyLPlayer(object):
    def __init__(self):
 
        # Создание GStreamer pipeline
        self.pipeline = Gst.Pipeline()
 
        # Получение событий на шине для GStreamer pipeline
        self.bus = self.pipeline.get_bus()
        self.bus.add_signal_watch()
        self.bus.connect('message', self.show_peak)
 
        # Создание элементов GStreamer
        self.playbin = Gst.ElementFactory.make('playbin', 'Multimedia Player')
 
        #volume element to adjust volume of audio
        self.volume = Gst.ElementFactory.make('volume', 'volume')
 
        #level element to get the rms/peak property
        self.level = Gst.ElementFactory.make('level', 'audiolevel')
 
        # Добавление playbin в pipeline
        self.pipeline.add(self.playbin)
        self.pipeline.add(self.volume)
        self.pipeline.add(self.level)
 
        # Установка параметров
        self.playbin.set_property('uri', uri)
        self.pipeline.set_state(Gst.State.PLAYING)
    
    def show_peak(self, bus, message):
        s = ''
        p = ''
        if str(type(message.src)) == "<class '__main__.__main__.GstLevel'>":
            s = message.get_structure()
            p = s.get_double('rms')
            print(p[1])
 
p = MyLPlayer()
p
Gtk.main()
Не пойму, почему GstLevel не возвращает параметры...
0
45 / 39 / 24
Регистрация: 29.11.2013
Сообщений: 145
04.01.2015, 00:02  [ТС]
Добился результата так:
Кликните здесь для просмотра всего текста

Python
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
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst
from gi.repository import Gtk
from gi.repository import GObject
 
GObject.threads_init()
Gst.init_check(None)
 
class MyLPlayer(object):
    def __init__(self):
 
        uri = 'http://icecast.omroep.nl:80/radio1-bb-mp3'
 
        self.pipeline = Gst.Pipeline.new('player')
        self.caps = Gst.Caps.from_string('audio/x-raw, rate=44100, channels=2')
 
        self.bus = self.pipeline.get_bus()
        self.bus.add_signal_watch()
        self.bus.connect('message', self.show_peak)
 
        self.playbin = Gst.ElementFactory.make('playbin', None)
        self.autoaudiosrc = Gst.ElementFactory.make('autoaudiosrc', None)
        self.audioconvert = Gst.ElementFactory.make('audioconvert', None)
        self.level = Gst.ElementFactory.make('level', None)
        self.fakesink = Gst.ElementFactory.make('fakesink', None)
 
        self.pipeline.add(self.playbin)
        self.pipeline.add(self.autoaudiosrc)
        self.pipeline.add(self.audioconvert)
        self.pipeline.add(self.level)
        self.pipeline.add(self.fakesink)
 
        if self.autoaudiosrc.link(self.audioconvert):
            print('self.audioconvert')
 
        if self.audioconvert.link_filtered(self.level, self.caps):
            print('self.audioconvert.link_filtered(self.level, self.caps)')
 
        if self.level.link(self.fakesink):
            print('self.fakesink')
 
        self.fakesink.set_property('sync', True)
        self.playbin.set_property('uri', uri)
        self.pipeline.set_state(Gst.State.PLAYING)
 
    def show_peak(self, bus, message):
        s = Gst.Message.get_structure(message)
        if message.type == Gst.MessageType.ELEMENT:
            if str(Gst.Structure.get_name(s)) == 'level':
                print(s['rms'], s['peak'], s['decay'])
 
MyLPlayer()
 
Gtk.main()

Но результат некорректный:
Code
1
[-699.9999998436322, -699.9999998436322] [-349.9999999218161, -349.9999999218161] [-349.9999999218161, -349.9999999218161]
Может кто сталкивался...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.01.2015, 00:02
Помогаю со студенческими работами здесь

Получить текущий уровень громкости
Здравствуйте. Впервые пишу на данном форуме. нужна помощь. есть код который изменяет текущий уровень громкости в системе using System;...

Bass.dll получить уровень громкости в dB
Приветствую. В принципе, сабж.

Bass.dll получить уровень громкости
Здравствуйте. Скажите, как получить все уровни громкости какого-либо трека. Сам пытался сделать вот так: __int64 Count =...

Какая прога может пакетно вычислить средний уровень громкости звука и поднять на заданный уровень?
Я хочу обработать звук в коллекции своих фильмов. Сжать динамический диапазон и затем поднять средний уровень громкости звука на уровень...

Как вывести уровень громкости в ProgressBar
Добрый день. Подскажите пожалуйста, как вывести сам уровень громкости в прогресс баре. namespace WindowsFormsApplication1 { ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru