diff --git a/bindings/python/README-tmpl.rst b/bindings/python/README-tmpl.rst index d32ea2e..6a524fc 100644 --- a/bindings/python/README-tmpl.rst +++ b/bindings/python/README-tmpl.rst @@ -134,7 +134,6 @@ Usage import ggwave import pyaudio - import numpy as np p = pyaudio.PyAudio() @@ -142,8 +141,8 @@ Usage waveform = ggwave.encode("hello python", txProtocol = 1, volume = 20) print("Transmitting text 'hello python' ...") - stream = p.open(format=pyaudio.paInt16, channels=1, rate=48000, output=True, frames_per_buffer=4096) - stream.write(np.array(waveform).astype(np.int16), len(waveform)) + stream = p.open(format=pyaudio.paFloat32, channels=1, rate=48000, output=True, frames_per_buffer=4096) + stream.write(waveform, len(waveform)//4) stream.stop_stream() stream.close() @@ -165,7 +164,7 @@ Usage try: while True: - data = stream.read(1024) + data = stream.read(1024, exception_on_overflow=False) res = ggwave.decode(instance, data) if (not res is None): try: diff --git a/bindings/python/README.md b/bindings/python/README.md index 0f741e8..fee70fe 100644 --- a/bindings/python/README.md +++ b/bindings/python/README.md @@ -8,7 +8,7 @@ README.rst is not commited to git because it is generated from [README-tmpl.rst] ## Building Run `make build` to generate an extension module as .so file. -You can test it then by importing it from python interpreter `import ggwave` and running `ggwave.testC(...)` (you have to be positioned in the directory where .so was built). +You can test it then by importing it from python interpreter `import ggwave` and running `ggwave.encode('test')` (you have to be positioned in the directory where .so was built). This is useful for testing while developing. Run `make sdist` to create a source distribution, but not publish it - it is a tarball in dist/ that will be uploaded to pip on `publish`. diff --git a/bindings/python/ggwave.pyx b/bindings/python/ggwave.pyx index e5e16a2..128fb38 100644 --- a/bindings/python/ggwave.pyx +++ b/bindings/python/ggwave.pyx @@ -3,7 +3,6 @@ cimport cython from cpython.mem cimport PyMem_Malloc, PyMem_Free import re -import struct cimport cggwave @@ -43,7 +42,7 @@ def encode(payload, txProtocolId = 1, volume = 10, instance = None): if (own): free(instance) - return struct.unpack("h"*n, output_bytes[0:2*n]) + return output_bytes def decode(instance, waveform): """ Analyze and decode audio waveform to obtain original payload diff --git a/examples/ggwave-py/receive.py b/examples/ggwave-py/receive.py index bcfbdaf..b99a1b3 100644 --- a/examples/ggwave-py/receive.py +++ b/examples/ggwave-py/receive.py @@ -10,7 +10,7 @@ instance = ggwave.init() try: while True: - data = stream.read(1024) + data = stream.read(1024, exception_on_overflow=False) res = ggwave.decode(instance, data) if (not res is None): try: diff --git a/examples/ggwave-py/send.py b/examples/ggwave-py/send.py index 0552373..9356c51 100644 --- a/examples/ggwave-py/send.py +++ b/examples/ggwave-py/send.py @@ -1,6 +1,5 @@ import ggwave import pyaudio -import numpy as np p = pyaudio.PyAudio() @@ -8,9 +7,8 @@ p = pyaudio.PyAudio() waveform = ggwave.encode("hello python", txProtocolId = 1, volume = 20) print("Transmitting text 'hello python' ...") -stream = p.open(format=pyaudio.paInt16, channels=1, rate=48000, output=True, frames_per_buffer=4096) -stream.write(np.array(waveform).astype(np.int16), len(waveform)) -stream.write(np.zeros(16*1024), 16*1024) # short silence at the end +stream = p.open(format=pyaudio.paFloat32, channels=1, rate=48000, output=True, frames_per_buffer=4096) +stream.write(waveform, len(waveform)//4) stream.stop_stream() stream.close() diff --git a/src/ggwave.cpp b/src/ggwave.cpp index 163ad6e..038fd82 100644 --- a/src/ggwave.cpp +++ b/src/ggwave.cpp @@ -268,7 +268,7 @@ const GGWave::Parameters & GGWave::getDefaultParameters() { GGWave::kBaseSampleRate, GGWave::kDefaultSamplesPerFrame, GGWAVE_SAMPLE_FORMAT_F32, - GGWAVE_SAMPLE_FORMAT_I16 + GGWAVE_SAMPLE_FORMAT_F32, }; return result; diff --git a/tests/test-ggwave.py b/tests/test-ggwave.py index b1c085f..895c4d5 100755 --- a/tests/test-ggwave.py +++ b/tests/test-ggwave.py @@ -1,6 +1,15 @@ +import sys import ggwave instance = ggwave.init() +payload = 'hello python' + # generate audio waveform for string "hello python" -waveform = ggwave.encode("hello python", txProtocolId = 1, volume = 20, instance = instance) +waveform = ggwave.encode(payload, txProtocolId = 1, volume = 20, instance = instance) + +# decode the audio waveform back to text +res = ggwave.decode(instance, waveform) + +if res != payload.encode(): + sys.exit(1)