Skip to main content

The Python API to the HANCE engine, which offers realtime audio enhancement.

Project description

Audio Enhancement in Python with HANCE

HANCE is an audio enhancement engine that delivers impressive performance. With its Python wrapper, you can easily integrate HANCE into your Python projects to improve the quality of audio signals.

To learn more about HANCE, visit Hance.ai.

Installation

To install the Python wrapper for HANCE, use 'pip':

python -m pip install hance

HANCE is compatible with Python 3 and later.

How to Use

The HANCE Python API is a wrapper around the C++ library. Here are a few ways you can use it.

To use the API, import it and list the available models:

import hance
models = hance.list_models()
print(models)

Process a file

To process a file with HANCE, you can use the process_file function as follows:

import hance
models = hance.list_models()
hance.process_file(models[0], input_file_path, output_file_path)

This will apply the enhancement model specified by models[0] to the input file located at input_file_path, and save the enhanced audio to the output file at output_file_path. Please note that in this example, we are using PySoundFile to read and write audio files. While PySoundFile is not a requirement for using HANCE, it is a convenient library for handling audio files in Python. If you wish to use the process_file function as shown here, you will need to install PySoundFile.

Process a stream

In addition to processing audio files, HANCE can also be used on audio streams in real-time. Here is an example using pyaudio to record the microphone, process it in real time, and output it to headphones.

import pyaudio
engine = hance.HanceEngine()
p = pyaudio.PyAudio()

FORMAT = pyaudio.paFloat32
CHANNELS = 1
RATE = 44100
CHUNK = 512


print("\nRecord audio from a microphone and process it in realtime with HANCE.")
print("To prevent feedback, make sure you are wearing headphones.")
print("PyAudio will induce some latency with the roundtrip to the soundcard,\nbut the HANCE engine runs in realtime.")
print("")

# Get a list of available input devices
input_devices = []
for i in range(p.get_device_count()):
    device_info = p.get_device_info_by_index(i)
    if device_info["maxInputChannels"] > 0:
        input_devices.append(device_info)

# Print the list of available input devices and ask the user to select one
print("Available input devices:")
for i, device in enumerate(input_devices):
    print(f"{i}: {device['name']}")
input_device_index = int(input("\nSelect an input device by entering its number: "))
input_device_info = input_devices[input_device_index]

# Get a list of available output devices
output_devices = []
for i in range(p.get_device_count()):
    device_info = p.get_device_info_by_index(i)
    if device_info["maxOutputChannels"] > 0:
        output_devices.append(device_info)

# Print the list of available output devices and ask the user to select one
print("\nAvailable output devices:")
for i, device in enumerate(output_devices):
    print(f"{i}: {device['name']}")
output_device_index = int(input("\nSelect an output device by entering its number: "))
output_device_info = output_devices[output_device_index]

models = hance.list_models()
processor = engine.create_processor(models[0], CHANNELS, RATE)

stop_thread = False
processor_active = True
def record_and_playback_thread():
    stream_record = p.open(format=FORMAT, channels=CHANNELS,
                rate=RATE, input=True,
                input_device_index=input_device_info['index'],
                frames_per_buffer=CHUNK)

    stream_play = p.open(format=pyaudio.paFloat32,
                channels=1,
                rate=RATE,
                frames_per_buffer=CHUNK,
                output=True,
                output_device_index=output_device_info['index']
                )
    while not stop_thread:
        data = stream_record.read(CHUNK, exception_on_overflow = False)
        audio_buffer = np.frombuffer(data, dtype=np.float32)
        if processor_active:
            audio_buffer = processor.process(audio_buffer)
        stream_play.write(audio_buffer.astype(np.float32).tobytes())
        
    # stop Recording
    stream_record.stop_stream()
    stream_record.close()
    
    stream_play.stop_stream()
    stream_play.close()
    
    

t = threading.Thread(target=record_and_playback_thread)
t.start()

print("\nThe microphone and processing is active")
while True:
    user_input = input("Enter 'p' to toggle processing on and off or 'x' to exit the thread: ")
    if user_input.lower() == "p":
        # Bypass processing and continue the loop
        if processor_active:
            processor_active = False
            print("The processing is bypassed")
        else:
            processor_active = True
            print("The processing is active")
    elif user_input.lower() == "x":
        # Stop the thread
        stop_thread = True
        break

t.join()
p.terminate()

For more information and examples on using HANCE, see the HANCE documentation.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

hance-1.0.4-py3-none-win_amd64.whl (7.2 MB view details)

Uploaded Python 3 Windows x86-64

hance-1.0.4-py3-none-win32.whl (5.2 MB view details)

Uploaded Python 3 Windows x86

hance-1.0.4-py3-none-manylinux1_x86_64.whl (11.5 MB view details)

Uploaded Python 3

hance-1.0.4-py3-none-macosx_11_0_arm64.whl (8.0 MB view details)

Uploaded Python 3 macOS 11.0+ ARM64

hance-1.0.4-py3-none-macosx_10_9_x86_64.whl (8.0 MB view details)

Uploaded Python 3 macOS 10.9+ x86-64

File details

Details for the file hance-1.0.4-py3-none-win_amd64.whl.

File metadata

  • Download URL: hance-1.0.4-py3-none-win_amd64.whl
  • Upload date:
  • Size: 7.2 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.15

File hashes

Hashes for hance-1.0.4-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 026732bb91765617ee97d4a6d4d54feb2198c7932b9ca8b2698eaaebd43981bf
MD5 949cce971206e16533a025db87f03066
BLAKE2b-256 15f80979963cfeed1f1ee6329923c48262d04ccc1583bca0c1eeed57ff1fb2f3

See more details on using hashes here.

File details

Details for the file hance-1.0.4-py3-none-win32.whl.

File metadata

  • Download URL: hance-1.0.4-py3-none-win32.whl
  • Upload date:
  • Size: 5.2 MB
  • Tags: Python 3, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.15

File hashes

Hashes for hance-1.0.4-py3-none-win32.whl
Algorithm Hash digest
SHA256 0c936f27d51eb658dcfd69e1dc01bafcfd4619fcc9421006b976aa45097bdd27
MD5 79f537f41a6af7724117341e2c8b5acb
BLAKE2b-256 9bf92e62a51b779c67fffbd6966dc03bad275f3756fc7a730b9e0651b43ac396

See more details on using hashes here.

File details

Details for the file hance-1.0.4-py3-none-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for hance-1.0.4-py3-none-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 2b1236780e67583638eed10d8010701ca0a1b6d73335f1d4ea2ac4f76404879f
MD5 27eecba65bba12ad5c1a943892dbafdc
BLAKE2b-256 387f17cad044618a98129a59bf17e07d16f8c68abfe12bd816468f231cf9917e

See more details on using hashes here.

File details

Details for the file hance-1.0.4-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for hance-1.0.4-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f341b051c0bc0a0b907c5f7b22ab0fa44ed295f524d6900100916fd77a480c86
MD5 ed74c344aea0d7a0f3e43fc63f1d4b53
BLAKE2b-256 f07cac26271651e56b217671ab7f2e08a44070b1c15246aae9c990598ba0aa01

See more details on using hashes here.

File details

Details for the file hance-1.0.4-py3-none-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for hance-1.0.4-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 aae707df0e336777579900db1f676b251e3b91dfcd4327c590446e28602d3990
MD5 c6c13407c1267fdae231469687ccfa86
BLAKE2b-256 7f482c4506d8fd8792be313143d24c0a2e7bd4121a1ece3ba0c9d8ba38033e9c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page