{"id":1418,"url":"https://github.com/quiet/QuietModemKit","last_synced_at":"2025-08-02T04:31:06.468Z","repository":{"id":41113764,"uuid":"83948959","full_name":"quiet/QuietModemKit","owner":"quiet","description":"iOS framework for the Quiet Modem (data over sound)","archived":false,"fork":false,"pushed_at":"2021-05-19T07:50:10.000Z","size":76,"stargazers_count":460,"open_issues_count":20,"forks_count":51,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-05-25T23:04:49.284Z","etag":null,"topics":["ios","modem","transmit-data","ultrasonic"],"latest_commit_sha":null,"homepage":"","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/quiet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-03-05T06:03:06.000Z","updated_at":"2025-05-12T16:54:35.000Z","dependencies_parsed_at":"2022-08-03T04:30:36.418Z","dependency_job_id":null,"html_url":"https://github.com/quiet/QuietModemKit","commit_stats":null,"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/quiet/QuietModemKit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quiet%2FQuietModemKit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quiet%2FQuietModemKit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quiet%2FQuietModemKit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quiet%2FQuietModemKit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quiet","download_url":"https://codeload.github.com/quiet/QuietModemKit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quiet%2FQuietModemKit/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268334610,"owners_count":24233793,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ios","modem","transmit-data","ultrasonic"],"created_at":"2024-01-05T20:15:45.988Z","updated_at":"2025-08-02T04:31:06.214Z","avatar_url":"https://github.com/quiet.png","language":"Objective-C","funding_links":[],"categories":["Media","Objective-C","Table of contents"],"sub_categories":["Audio","Other free courses"],"readme":"QuietModemKit\n==============\n\nThis is the iOS framework for https://github.com/quiet/quiet\n\nWith this library, you can send data through sound.\n\nLive demo: https://quiet.github.io/quiet-js/\n\nOther platforms:\n* Javascript: https://github.com/quiet/quiet-js\n* Android: https://github.com/quiet/org.quietmodem.Quiet\n\nWhy sound? Isn't that outdated?\n---------------\nIf you are old enough, you may remember using dial-up modems to connect to the internet. In a sense, this package brings that back. While it's true that this is somewhat of a retro approach, consider the advantages of using sound.\n\n* Highly cross-platform. Any device with speakers and a microphone and sufficient computational power can use this medium to communicate.\n\n* No pairing. Unlike Bluetooth, sound can be used instantly without the need to pair devices. This reduces the friction and improves the user experience.\n\n* Embeddable content. Similar to a QR code, short packets of data can be encoded into streaming or recorded audio and can then be later decoded by this package.\n\nWhat does it sound like?\n---------------\nThe answer to this depends on which operating mode you choose. Quiet provides audible and near-ultrasonic modes. Audible modes sound something like a puff of air. The near-ultrasonic modes run at 17+kHz and are virtually inaudible to adults. Either mode can operate at relatively low volumes as long as there isn't too much background noise.\n\nHow fast does it go?\n---------------\nQuiet's provided audible mode transfers at approximately 7kbps. In cases where two devices are connected over a cable (via 3.5mm jack) it can run in cable mode, which transfers at approximately 64kbps.\n\nBuilding\n--------------\nCMake is required to build QuietModemKit. If you aren't sure if you have CMake installed, run `brew install cmake`.\n\nIt is recommended that you use Carthage to build QuietModemKit. Simply run `brew install cmake` and then add `github \"Quiet/QuietModemKit\"` to your Cartfile and run `carthage update`.\n\nExample\n--------------\nTransmitter:\n```objc\n#import \u003cQuietModemKit/QuietModemKit.h\u003e\n\nint main(int argc, char * argv[]) {\n    QMTransmitterConfig *txConf = [[QMTransmitterConfig alloc] initWithKey:@\"ultrasonic-experimental\"];\n\n    QMFrameTransmitter *tx = [[QMFrameTransmitter alloc] initWithConfig:txConf];\n\n    NSString *frame_str = @\"Hello, World!\";\n    NSData *frame = [frame_str dataUsingEncoding:NSUTF8StringEncoding];\n    [tx send:frame];\n\n    CFRunLoopRun();\n\n    [tx close];\n\n    return 0;\n}\n\n```\n\nReceiver:\n```objc\n#import \u003cQuietModemKit/QuietModemKit.h\u003e\n\nstatic QMFrameReceiver *rx;\n\nvoid (^recv_callback)(NSData*) = ^(NSData *frame){\n    printf(\"%s\\n\", [frame bytes]);\n};\n\nvoid (^request_callback)(BOOL) = ^(BOOL granted){\n    QMReceiverConfig *rxConf = [[QMReceiverConfig alloc] initWithKey:@\"ultrasonic-experimental\"];\n    rx = [[QMFrameReceiver alloc] initWithConfig:rxConf];\n    [rx setReceiveCallback:recv_callback];\n};\n\nint main(int argc, char * argv[]) {\n    [[AVAudioSession sharedInstance] requestRecordPermission:request_callback];\n\n    CFRunLoopRun();\n\n    if (rx != nil) {\n        [rx close];\n    }\n\n    return 0;\n}\n```\n\nNote that we ask for the Record permission. This is required to use the receiver.\n\nProfiles\n--------------\nThe modem can be used audibly or via ultrasonic sound. `QMTransmitterConfig` and `QMReceiverConfig` are used to select modem configuration. For a full list of valid keys, refer to the top-level keys of [quiet-profiles.json](https://github.com/quiet/QuietModemKit/blob/master/quiet-profiles.json).\n\nLicense\n--------------\n3-Claused BSD, plus third-party licenses (mix of MIT and BSD, see licenses/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquiet%2FQuietModemKit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquiet%2FQuietModemKit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquiet%2FQuietModemKit/lists"}