3

Python で無限に長い純粋なサイン トーンを作成しようとしています (したがって、後でリアルタイムのオン/オフ イベントを追加できます)。私の推測では、次のチャンクが最後のチャンクが終了したときと同じウェーブのサイクルで開始されていないか、次のチャンクの計算に遅延があり、それがどれなのかわかりません。

これらのいずれかが発生していますか、それとも他のエラーを犯しましたか? さらに、受信データをリアルタイムで変更する機能を犠牲にすることなく、より良いアプローチはありますか?

import time
import numpy
import pyaudio
import math

CHUNK = 4096
RATE = 44100

def sine(current_time, frequency=440):
    length = CHUNK
    factor = float(frequency) * (math.pi * 2) / RATE
    this_chunk = numpy.arange(length) + current_time
    return numpy.sin(this_chunk * factor)

def get_chunk():
    data = sine(time.time())
    return data * 0.1

def callback(in_data, frame_count, time_info, status):
    chunk = get_chunk() * 0.25
    data = chunk.astype(numpy.float32).tostring()
    return (data, pyaudio.paContinue)

p = pyaudio.PyAudio()
stream = p.open(format = pyaudio.paFloat32,
                channels = 2,
                rate = RATE,
                output = True,
                stream_callback = callback)

stream.start_stream()

while stream.is_active():
    time.sleep(0.1)

stream.stop_stream()
stream.close()
4

1 に答える 1