예제 #1
0
def test_graph_render():
    graph = AudioGraph()
    sine = SineOscillator(440)
    graph.play(sine)
    with pytest.raises(RuntimeError):
        graph.render(441000)
    del graph
예제 #2
0
def test_graph_dummy_audioout():
    output = AudioOut_Dummy(2)
    graph = AudioGraph(output_device=output)

    sine = SineOscillator([ 220, 440 ])
    graph.play(sine)

    graph.render(1024)
    samples = graph.output.output_buffer[0][:1024]
    assert len(samples) == 1024

    del graph
def test_expansion_upmix():
    output = AudioOut_Dummy(4)
    graph = AudioGraph(output_device=output)
    a = SquareOscillator([440, 880, 1320], [0.3, 0.7])
    assert a.num_input_channels == 3
    assert a.num_output_channels == 3

    process_tree(a)
    assert np.all(a.inputs["frequency"].output_buffer[0] == 440.0)
    assert np.all(a.inputs["frequency"].output_buffer[1] == 880.0)
    assert np.all(a.inputs["frequency"].output_buffer[2] == 1320.0)
    assert np.all(a.inputs["width"].output_buffer[0] == 0.3)
    assert np.all(a.inputs["width"].output_buffer[1] == 0.7)
    assert np.all(a.inputs["width"].output_buffer[2] == 0.0)

    assert count_zero_crossings(a.output_buffer[0]) == math.ceil(
        440 * DEFAULT_BUFFER_LENGTH / graph.sample_rate)
    assert count_zero_crossings(a.output_buffer[1]) == math.ceil(
        880 * DEFAULT_BUFFER_LENGTH / graph.sample_rate)
    assert count_zero_crossings(a.output_buffer[2]) == 0

    #--------------------------------------------------------------------------------
    # When processed through a Graph, multichannel expansion duplicates the
    # 2-channel width node to become 3-channel
    #--------------------------------------------------------------------------------
    a = SquareOscillator([440, 880, 1320], [0.3, 0.7])
    graph.play(a)
    graph.render(1024)
    assert graph.node_count == 4
    assert np.all(a.inputs["frequency"].output_buffer[0] == 440.0)
    assert np.all(a.inputs["frequency"].output_buffer[1] == 880.0)
    assert np.all(a.inputs["frequency"].output_buffer[2] == 1320.0)
    assert np.all(a.inputs["width"].output_buffer[0] == 0.3)
    assert np.all(a.inputs["width"].output_buffer[1] == 0.7)
    assert np.all(a.inputs["width"].output_buffer[2] == 0.3)
    assert count_zero_crossings(a.output_buffer[0]) == math.ceil(
        440 * DEFAULT_BUFFER_LENGTH / graph.sample_rate)
    assert count_zero_crossings(a.output_buffer[1]) == math.ceil(
        880 * DEFAULT_BUFFER_LENGTH / graph.sample_rate)
    assert count_zero_crossings(a.output_buffer[2]) == math.ceil(
        1320 * DEFAULT_BUFFER_LENGTH / graph.sample_rate)

    graph.stop(a)
    graph.render(1024)
    #--------------------------------------------------------------------------------
    # Only remaining note is the abstract audio output node
    #--------------------------------------------------------------------------------
    assert graph.node_count == 1