diff --git a/.gitignore b/.gitignore index 50602ac..9b6306f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,138 @@ -# Files and directories created by pub +# Miscellaneous +*.class +*.lock +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/* + +# Visual Studio Code related +.classpath +.project +.settings/ +.vscode/* + +# Flutter repo-specific +/bin/cache/ +/bin/mingit/ +/dev/benchmarks/mega_gallery/ +/dev/bots/.recipe_deps +/dev/bots/android_tools/ +/dev/docs/doc/ +/dev/docs/flutter.docs.zip +/dev/docs/lib/ +/dev/docs/pubspec.yaml +/dev/integration_tests/**/xcuserdata +/dev/integration_tests/**/Pods +/packages/flutter/coverage/ +version + +# packages file containing multi-root paths +.packages.generated + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id .dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies .packages -# Remove the following pattern if you wish to check in your lock file -pubspec.lock - -# Conventional directory for build outputs +.pub-cache/ +.pub/ build/ +flutter_*.png +linked_*.ds +unlinked.ds +unlinked_spec.ds +.fvm/flutter_sdk + +# Android related +**/android/**/gradle-wrapper.jar +**/android/.gradle +**/android/captures/ +**/android/gradlew +**/android/gradlew.bat +**/android/local.properties +**/android/**/GeneratedPluginRegistrant.java +**/android/key.properties +**/android/.idea/ +*.jks + +# iOS/XCode related +**/ios/**/*.mode1v3 +**/ios/**/*.mode2v3 +**/ios/**/*.moved-aside +**/ios/**/*.pbxuser +**/ios/**/*.perspectivev3 +**/ios/**/*sync/ +**/ios/**/.sconsign.dblite +**/ios/**/.tags* +**/ios/**/.vagrant/ +**/ios/**/DerivedData/ +**/ios/**/Icon? +**/ios/**/Pods/ +**/ios/**/.symlinks/ +**/ios/**/profile +**/ios/**/xcuserdata +**/ios/.generated/ +**/ios/Flutter/App.framework +**/ios/Flutter/Flutter.framework +**/ios/Flutter/Flutter.podspec +**/ios/Flutter/Generated.xcconfig +**/ios/Flutter/app.flx +**/ios/Flutter/app.zip +**/ios/Flutter/.last_build_id +**/ios/Flutter/flutter_assets/ +**/ios/Flutter/flutter_export_environment.sh +**/ios/ServiceDefinitions.json +**/ios/Runner/GeneratedPluginRegistrant.* + +# Windows +**/windows/flutter/generated_plugin_registrant.cc +**/windows/flutter/generated_plugin_registrant.h +**/windows/flutter/generated_plugins.cmake +**/windows/flutter/ephemeral + +# Coverage +coverage/ + +# Submodules +!pubspec.lock +packages/**/pubspec.lock + +# Web related +lib/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Exceptions to the above rules. +!**/ios/**/default.mode1v3 +!**/ios/**/default.mode2v3 +!**/ios/**/default.pbxuser +!**/ios/**/default.perspectivev3 +!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages +!/dev/ci/**/Gemfile.lock +!.vscode/extensions.json +!.vscode/launch.json +!.idea/codeStyles/ +!.idea/dictionaries/ +!.idea/runConfigurations/ -# Directory created by dartdoc -doc/api/ +# Ignore non-CI golden files and failures +test/**/goldens/**/*.* +test/**/failures/**/*.* +!test/**/goldens/ci/*.* \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e27585..cc4838d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [0.2.0] - Null safety and data chunk fix +* Updated to null safety +* Updated to Dart 3 & Flutter 3.13.x +* Added official flutter_test dependency and removed test dependency + ## [0.1.0] - Initial open source version * Generate 8 bit audio diff --git a/lib/src/data_chunk8.dart b/lib/src/data_chunk8.dart index a97648d..0243a84 100644 --- a/lib/src/data_chunk8.dart +++ b/lib/src/data_chunk8.dart @@ -1,10 +1,10 @@ -import 'dart:typed_data'; import 'dart:math'; +import 'dart:typed_data'; -import 'byte_helpers.dart'; -import 'chunk.dart'; -import 'format_chunk.dart'; -import 'generator_function.dart'; +import 'package:wave_generator/src/byte_helpers.dart'; +import 'package:wave_generator/src/chunk.dart'; +import 'package:wave_generator/src/format_chunk.dart'; +import 'package:wave_generator/src/generator_function.dart'; import '../wave_generator.dart'; @@ -12,7 +12,7 @@ class DataChunk8 implements DataChunk { final FormatChunk format; final List notes; - final String _sGroupId = 'data'; + final String _sGroupId = "data"; // nb. Stored as unsigned bytes in the rage 0 to 255 static const int min = 0; @@ -22,7 +22,7 @@ class DataChunk8 implements DataChunk { return byte.clamp(min, max); } - const DataChunk8(this.format, this.notes); + DataChunk8(this.format, this.notes); @override Stream bytes() async* { @@ -46,7 +46,7 @@ class DataChunk8 implements DataChunk { // compare against step count to select the correct note int noteNumber = 0; int incrementNoteOnSample = - (notes[noteNumber].msDuration * format.sampleRate) ~/ 1000; + ((notes[noteNumber].msDuration * format.sampleRate) / 1000).round(); int sampleMax = totalSamples; var amplify = (max + 1) / 2; @@ -54,7 +54,7 @@ class DataChunk8 implements DataChunk { if (incrementNoteOnSample == step) { noteNumber += 1; incrementNoteOnSample += - (notes[noteNumber].msDuration * format.sampleRate) ~/ 1000; + ((notes[noteNumber].msDuration * format.sampleRate) / 1000).round(); } double theta = notes[noteNumber].frequency * (2 * pi) / format.sampleRate; @@ -76,7 +76,9 @@ class DataChunk8 implements DataChunk { } @override - int get length => totalSamples * format.blockAlign; + int get length { + return totalSamples * format.blockAlign; + } int get totalSamples { double secondsDuration = diff --git a/lib/wave_generator.dart b/lib/wave_generator.dart index c6ddde7..e784f98 100644 --- a/lib/wave_generator.dart +++ b/lib/wave_generator.dart @@ -98,16 +98,28 @@ class WaveGenerator { var dataChunk = _getDataChunk(formatHeader, notes); var fileHeader = WaveHeader(formatHeader, dataChunk); - await for (int data in fileHeader.bytes()) { - yield data; + try { + await for (int data in fileHeader.bytes()) { + yield data; + } + } catch (e) { + print(e); } - await for (int data in formatHeader.bytes()) { - yield data; + try { + await for (int data in formatHeader.bytes()) { + yield data; + } + } catch (e) { + print(e); } - await for (int data in dataChunk.bytes()) { - yield data; + try { + await for (int data in dataChunk.bytes()) { + yield data; + } + } catch (e) { + print(e); } } diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..99d0c44 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,172 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + url: "https://pub.dev" + source: hosted + version: "1.17.2" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + flutter: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + lints: + dependency: "direct dev" + description: + name: lints + sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + matcher: + dependency: transitive + description: + name: matcher + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + url: "https://pub.dev" + source: hosted + version: "0.12.16" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + meta: + dependency: transitive + description: + name: meta + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + url: "https://pub.dev" + source: hosted + version: "1.9.1" + path: + dependency: transitive + description: + name: path + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" + source: hosted + version: "1.8.3" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" + source: hosted + version: "1.11.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + url: "https://pub.dev" + source: hosted + version: "0.6.0" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + web: + dependency: transitive + description: + name: web + sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + url: "https://pub.dev" + source: hosted + version: "0.1.4-beta" +sdks: + dart: ">=3.1.0-185.0.dev <4.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index a603c04..38ba72a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,11 +1,13 @@ name: wave_generator description: A dart package to generate audio wave data on the fly -version: 0.1.0 +version: 0.2.0 homepage: https://github.com/patchandthat/wave-generator environment: - sdk: '>=2.12.0 <3.0.0' + sdk: ">=3.0.1 <4.0.0" dev_dependencies: - lints: ^1.0.1 - test: ^1.20.2 + lints: ^2.1.1 + flutter_test: + sdk: flutter + # test: ^1.24.6 diff --git a/s-o-s.wav b/s-o-s.wav new file mode 100644 index 0000000..4a4d6fb Binary files /dev/null and b/s-o-s.wav differ diff --git a/test/data_chunk_8_test.dart b/test/data_chunk_8_test.dart index d7d0b1f..ce6ca17 100644 --- a/test/data_chunk_8_test.dart +++ b/test/data_chunk_8_test.dart @@ -1,8 +1,7 @@ -import 'package:test/test.dart'; +import 'package:flutter_test/flutter_test.dart'; import 'package:wave_generator/src/chunk.dart'; import 'package:wave_generator/src/data_chunk8.dart'; import 'package:wave_generator/src/format_chunk.dart'; - import 'package:wave_generator/wave_generator.dart'; void main() { diff --git a/test/format_chunk_test.dart b/test/format_chunk_test.dart index d8e54bb..ecd401e 100644 --- a/test/format_chunk_test.dart +++ b/test/format_chunk_test.dart @@ -1,4 +1,4 @@ -import 'package:test/test.dart'; +import 'package:flutter_test/flutter_test.dart'; import 'package:wave_generator/src/format_chunk.dart'; import 'package:wave_generator/wave_generator.dart'; @@ -220,7 +220,7 @@ void main() { if (currentByte == expectedByte[0]) { expect(byte, expectedByte[1], reason: - 'Byte at index ${currentByte} incorrect. ${byte} instead of ${expectedByte[1]}'); + 'Byte at index $currentByte incorrect. $byte instead of ${expectedByte[1]}'); } } @@ -289,7 +289,7 @@ void main() { if (currentByte == expectedByte[0]) { expect(byte, expectedByte[1], reason: - 'Byte at index ${currentByte} incorrect. ${byte} instead of ${expectedByte[1]}'); + 'Byte at index $currentByte incorrect. $byte instead of ${expectedByte[1]}'); } } diff --git a/test/wave_generator_test.dart b/test/wave_generator_test.dart index c03a6ac..7cc0425 100644 --- a/test/wave_generator_test.dart +++ b/test/wave_generator_test.dart @@ -1,6 +1,6 @@ import 'dart:io'; -import 'package:test/test.dart'; +import 'package:flutter_test/flutter_test.dart'; import 'package:wave_generator/wave_generator.dart'; void main() { diff --git a/test_out.wav b/test_out.wav new file mode 100644 index 0000000..ef696fe Binary files /dev/null and b/test_out.wav differ