python aud取し取得した音量をOSCを使ってデータを送る.2つのマイクをコールバック关数にIDを返すことで识别している。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python aud取し取得した音量をOSCを使ってデータを送る.2つのマイクをコールバック关数にIDを返すことで识别している。相关的知识,希望对你有一定的参考价值。
#!python3
# -*- coding: utf-8 -*-
import math
import pyaudio
import time
import argparse
import struct
from pythonosc import osc_message_builder
from pythonosc import udp_client
FORMAT = pyaudio.paInt16
SHORT_NORMALIZE = (1.0/32768.0)
WIDTH = 2
CHANNELS = 2
RATE = 44100
def get_rms(block):
count = len(block)/2
format = "%dh"%(count)
shorts = struct.unpack( format, block )
# iterate over the block.
sum_squares = 0.0
for sample in shorts:
# sample is a signed short in +/- 32768.
# normalize it to 1.0
n = sample * SHORT_NORMALIZE
sum_squares += n*n
return math.sqrt( sum_squares / count )
class Callback(object):
def __init__(self, id, client):
self.osc_id = id
self.osc_client = client
def callback(self, in_data, frame_count, time_info, status):
msg = osc_message_builder.OscMessageBuilder(address='/volume')
msg.add_arg(self.osc_id, arg_type = "i")
msg.add_arg(get_rms(in_data), arg_type = "f")
msg = msg.build()
self.osc_client.send(msg)
return (in_data, pyaudio.paContinue)
class MicSender(object):
def __init__(self):
pass
def start(self, id, cbfunc):
stream = p.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
input_device_index = id,
output = True,
stream_callback = cbfunc.callback)
stream.start_stream()
while stream.is_active():
time.sleep(0.1)
stream.stop_stream()
stream.close()
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--ip', default='127.0.0.1', help='This ip of the OSC server')
parser.add_argument('--port', type=int, default=8002, help='The port the OSC server is listening on')
args = parser.parse_args()
client = udp_client.UDPClient(args.ip, args.port)
p = pyaudio.PyAudio()
ms = MicSender()
ms.start(1, Callback(1, client))
ms.start(2, Callback(2, client))
p.terminate()
以上是关于python aud取し取得した音量をOSCを使ってデータを送る.2つのマイクをコールバック关数にIDを返すことで识别している。的主要内容,如果未能解决你的问题,请参考以下文章
python 熊猫を使って,简単にウェブ上のテーブルデータを取得
markdown 每当でlib配下のクラスを使った处理をしようとしたらuninitialized constantエラー
ruby Set.classifyを使って,设定した条件での分类をする。参考:http://www.ruby-doc.org/stdlib-2.1.2/libdoc/set/rdoc/Set.html
python トラックバーを使って色を指定する
html 帆布を使って白黒画像を生成する
ruby 可转发を使った代表パターン