Git Product home page Git Product logo

quietmodemkit's Introduction

Quiet Modem Project logo

Build Status

Documentation

This library uses liquid SDR to transmit data through sound. This makes it suitable for sending data across a 3.5mm headphone jack or via speaker and mic. Quiet can build standalone binaries for encoding/decoding data via .wav files or for streaming through your soundcard via PortAudio. It can also be built as a library to be consumed by other C programs.

Build

With the dependencies installed, run ./bootstrap provided by this library, which will create a build directory and invoke cmake. If you would like to install it after building, do cd build && make install.

Profiles

The encoding and decoding processes are controlled by the profiles in quiet-profiles.json. Each profile contains a complete set of parameters such as modem type and error correction.

Cable

For cable transmission, use the cable- profiles. These will attempt to use nearly the full spectrum provided by your soundcard. As such, they contain many audible frequencies and should not be used on channels that could be heard by people.

Ultrasonic

The ultrasonic- profiles encode data through a very low bitrate, but the audio content lies above 16kHz, which should pass through audio equipment relatively well while being inaudible to the average person. This is a good option for sending data through a channel where you would prefer not to disrupt human listeners.

Dependencies

Acknowledgements

I'd like to thank the people who provided feedback and helped me with pull requests and advice on software

  • Joseph Gaeddert, for his excellent SDR library, encouragement, and feedback on all things DSP
  • Alon Zakai and @juj for advising me on emscripten and for taking my PRs
  • Jan-Ivar Bruaroey and Maire Reavy for helping me patch the echo cancellation behavior of Firefox's getUserMedia
  • Josh Gao for advising me on API design and C idioms.
  • Ryan Hitchman for extensive testing on Android Chrome
  • Fabrice Bellard for thoughtfully answering a stranger's question out of the blue about digital communications

quietmodemkit's People

Contributors

aaroncrespo avatar brian-armstrong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

quietmodemkit's Issues

Works between Android and IOS

Hi Brian,

I'm about to compile and develop QuietModem for both Android and IOS.

You mention that they are highly cross-platform so just wanted to confirm if you can use a device with the Android and a device using the IOS and that they can work with each other and are there any gotchas I need to be aware of?

Cheers
Andy

Packet Loss Problem - Swift

When transmitting long data (about 100 characters ) packet loss is about 90% .

Tried with 50 % volume
Please Help

Demodulate pre-recorded samples or share AVAudioRecorder instances

How can I pass QuiteModemKit a buffer of pre-recorded samples for demodulation, or samples from a sound file that may have been recorded at an earlier time?

I'm already recording audio to listen for voice commands (or other signals), and at times I want to pass it through quiet to look for modulated metadata, but QuietModemKit costs battery to listen at all times. I see some LoopbackAudio references in the original impl., so I'm hoping it's straightforward to expose the demodulation step as an explicit function.

Archive - Failed to verify bitcode

I am trying to archive but it fails. My Xcode version is 10.2.1, I have this framework latest one v0.2. I posted the screenshot of the issue. Please advise if anyone already facing it. Where I miss?
Issue

Error carthage update

Hi!

There was a problem during installation. (Using Xcode 8.3.2)

$ carthage update --verbose

*** Fetching QuietModemKit
*** Checking out QuietModemKit at "v0.1.5"

... ...

Undefined symbols for architecture arm64:
  "_quiet_encoder_close", referenced from:
      -[QMFrameTransmitter close] in QMFrameTransmitter.o
  "_quiet_encoder_set_nonblocking", referenced from:
      -[QMFrameTransmitter setNonBlocking] in QMFrameTransmitter.o
  "_quiet_encoder_send", referenced from:
... ...
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

or 

Undefined symbols for architecture armv7:
  "_quiet_encoder_close", referenced from:
      -[QMFrameTransmitter close] in QMFrameTransmitter.o
  "_quiet_encoder_set_nonblocking", referenced from:
      -[QMFrameTransmitter setNonBlocking] in QMFrameTransmitter.o
  "_quiet_encoder_send", referenced from:
... ...
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

What should I do?

Help me

Unable to build

Hello! I'm trying to build framework using Carthage and unable to successfully do that.
Here is the output log : https://gist.github.com/xzenon/e342865614ae0d482ddc1a86947fc9be

Error message says:

libquiet requires libliquid but cannot find it

  fetch the devel branch using

      git clone https://github.com/quiet/liquid-dsp.git -b devel --single-branch

  and install it before continuing

I've fetched libliquid sources, compiled and installed it manually but still unable to compile QuietModem.

Would be great if you can advice something. Thanks!

Build Error: clang: error: unknown argument: '-='

hey @brian-armstrong, I'm running into an error while trying to build QM. I get the following error while running a carthage update command:

Run Build Command(s):/Applications/Xcode.app/Contents/Developer/usr/bin/make -f Makefile cmTC_2607f/fast && /Applications/Xcode.app/Contents/Developer/usr/bin/make  -f CMakeFiles/cmTC_2607f.dir/build.make CMakeFiles/cmTC_2607f.dir/build
Building C object CMakeFiles/cmTC_2607f.dir/INT.c.o
/usr/bin/clang   -=  -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.0.sdk  -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.0.sdk -MD -MT CMakeFiles/cmTC_2607f.dir/INT.c.o -MF CMakeFiles/cmTC_2607f.dir/INT.c.o.d -o CMakeFiles/cmTC_2607f.dir/INT.c.o -c /Users/cmassoudi/Library/Caches/org.carthage.CarthageKit/DerivedData/14.0.1_14A400/QuietModemKit/v0.3.2/Build/Intermediates.noindex/ArchiveIntermediates/QuietModemKit/BuildProductsPath/Release-iphoneos/jansson/CMakeFiles/CheckTypeSize/INT.c
clang: error: unknown argument: '-='

That unknown arg error (clang: error: unknown argument: '-=') made it seem like some env variables might be missing. I took a peek at the apple.toolchain.make and I see the cmake flags have an arg APPLE_VERSION_FLAG- I think that's the culprit.

apple.toolchain.make L195

set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${APPLE_VERSION_FLAG} ${BITCODE_FLAG} -isysroot ${CMAKE_OSX_SYSROOT}" CACHE STRING "")

Any help would be much appreciated, thanks!
-Cam

How to increase the distance?

I am trying to find a way to check how far can the signal be detected while keeping the lowest possible volume. How can I do that? For me the data is small, so speed is not a very big issue.

How do it faster

Hi,
I am trying out this project, and it works nicely. But my case is time sensitive, I use iphone and my nexus phone as transmitter, raspberry pi as receiver, and I send 32 bytes once a time. It costs around 800ms for both prefix audible mode and ultrasonic-experimental mode.

Is there any way that I can do with config file to make it faster?

PS: distance is not a issue, I can make it close enough. ^^

Any suggestion from you will really help me.

Transmit and receive data across devices

Hi,

I built a iOs app based on https://github.com/winster/QuietShare and your latest release v.0.1.6.
I also built Android app based on quiet/org.quietmodem.Quiet .
What I notice is there is no difference between 4 ultrasonic profiles.

I ran iOs app on iphone 7 and Android app on Samsung S6, also https://quiet.github.io/quiet-js on Chrome browser on Macbook. All three devices are on listening/scanning.
My observation is iOs is quite good in receiving, it can hear from laptop and Android. But it is bad in transmit, the browser app never get text and Android app rarely get text from iOs. The iOs can listen to its own sending text though.
Android app is good in transmitting text, all devices can receive text from it.
All devices are set very close to each other.
Sound level on all devices is set around 50-70%.
Could you find any explanation for different behaviours on devices/OS?

Library not working?

Hello, I tried to create a small project with this library, I did setup two versions of the app one for receiver and another for the transmitter. I installed in two devices running iOS 10 and I never got a callback in the receiver end even though no crashes or errors were reported in the transmitter app.

Can you help?

Cocoapods Support

QMKit should support installation by Cocoapods as well as by Carthage

Issue with the app store

Hi,
As you can see on my previous issue :
cawfree/react-native-quiet#9

I was playing with this library and I realized that the app is rejected by App Connect because the file build-c-libraries.sh from QuietModemKit is not signed.

I get a message like this :

Invalid Signature. Code object is not signed at all

Do you have any idea how to solve this issue ?

Crash on os iOS 9

self.rx?.setReceiveCallback(self.receiveCallback);

crashes on iOS 9 but works fine in iOS11

Log

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSThread initWithBlock:]: unrecognized selector sent to instance 0x7fd338697da0'

Crash on iPhone

Hi Brian, I can able to transfer data using Quiet framework in iOS. But consistently app is crashing in iOS due to below error message. I think this is related incorrect memory access. But I didn't do any code changes related to memory issue. Can you please help on this?
You can find the code if required https://github.com/chanduthedev/iOS/tree/master/QuietShare

Error log:

2019-05-06 11:39:28.695414+0800 TestSoundPayment[745:112219] In receive profile :ultrasonic-experimental
TestSoundPayment(745,0x104cfebc0) malloc: Incorrect checksum for freed object 0x10581f000: probably modified after being freed.
Corrupt value: 0x0
TestSoundPayment(745,0x104cfebc0) malloc: *** set a breakpoint in malloc_error_break to debug
(lldb)

Crash backtrace:

Screenshot 2019-05-06 at 11 41 25 AM

Improve audio quality

For some reason, the receiver in QMKit doesn't perform as well as in JS or Android. I should investigate and attempt to bring it up to parity. It's likely to do with configuration of CoreAudio

Build Failure - Xcode 13.4.1 / CMake

I've been trying out the library, which I have working on Android, but am running into issues when trying to build on iOS. I'm using Xcode 13.4.1 (13F100), with CMake version 3.23.2 installed via brew.

I've run through the following steps to get the dependencies compiled:

  1. Carthage install
    $ brew update
    $ brew install carthage

  2. Liquid DSP
    $ brew install cmake
    $ brew install automake
    $ git clone https://github.com/quiet/liquid-dsp.git -b devel --single-branch
    $ cd liquid-dsp
    $ autoupdate
    $ ./bootstrap.sh
    $ ./configure
    $ make
    $ sudo make install

  3. libfec
    $ git clone https://github.com/quiet/libfec.git
    $ cd libfec
    $ ./configure --build=x86_64-apple-darwin15.0.0
    $ make
    $ sudo make install

  4. Jansson
    $ brew install libtool
    $ git clone https://github.com/akheron/jansson.git
    $ cd jansson
    $ autoreconf -i
    $ ./configure
    $ make
    $ make install

  5. portaudio
    $ git clone https://github.com/PortAudio/portaudio
    $ cd portaudio
    $ ./configure
    $ make
    $ make install

  6. libsndfile
    $ download from http://www.mega-nerd.com/libsndfile/#Download
    $ cd libsndfile
    $ ./configure
    $ make
    $ sudo make install

  7. quiet-lwip
    $ git clone https://github.com/quiet/quiet-lwip.git
    $ cd quiet-lwip
    $ mkdir build
    $ cd build
    $ cmake ..
    $ copy headers from portaudio, quiet-portaudio, and quiet into include directory.
    $ make

  8. libcorrect
    $ git clone https://github.com/quiet/libcorrect.git
    $ cd libcorrect
    $ mkdir build
    $ cd build
    $ cmake ..
    $ make
    $ make install

  9. quiet
    $ git clone https://github.com/quiet/quiet
    $ cd quiet
    $ ./bootstrap
    $ cd build && make install

When I attempt to build the framework via:

xcodebuild -configuration Debug build

I am getting multple errors, including "libquiet requires libliquid but cannot find it". I've checked my path settings, and checked my included headers. If you could provide any insight I would greatly appreciate it. I've attached the full xcodebuild output for reference.

@brian-armstrong have you considered enabling sponsorship for this project? I would be interested in contributing financially, or in other ways to support it's development. Thank you for your hard work on this.

xcodebuild.txt

Which branch?

@brian-armstrong Hi, I am happy to use this nice kit.
I am currently trying to use this repository but I see there is much difference in "devel" and "master"branch.
Which one is correct to use?

Thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.