diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 714bff14d7..eea0e2a0f7 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -65,7 +65,7 @@ body:
- Web (WASM)
- Linux (x86_64)
- macOS (x86_64, arm64)
- - Windows (x86_64)
+ - Windows (x86_64, arm64)
- Raspberry Pi
- ARM Cortex-M
validations:
diff --git a/.github/workflows/c-demos.yml b/.github/workflows/c-demos.yml
index 396c082870..63b50b1e4b 100644
--- a/.github/workflows/c-demos.yml
+++ b/.github/workflows/c-demos.yml
@@ -66,7 +66,7 @@ jobs:
strategy:
matrix:
- machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64]
+ machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64, pv-windows-arm64]
steps:
- uses: actions/checkout@v3
@@ -123,7 +123,8 @@ jobs:
strategy:
matrix:
- machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64]
+ machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64, pv-windows-arm64]
+ make_file: "Unix Makefiles"
include:
- machine: rpi3-32
platform: raspberry-pi
@@ -140,6 +141,10 @@ jobs:
- machine: rpi5-64
platform: raspberry-pi
arch: cortex-a76-aarch64
+ - machine: pv-windows-arm64
+ platfrom: windows
+ arch: arm64
+ make_file: "MinGW Makefiles"
steps:
- uses: actions/checkout@v3
@@ -147,7 +152,7 @@ jobs:
submodules: recursive
- name: Create build directory
- run: cmake -B ./build
+ run: cmake -G "${{ matrix.make_file }}" -B ./build
- name: Build filedemo
run: cmake --build ./build --target porcupine_demo_file
diff --git a/.github/workflows/dotnet-demos.yml b/.github/workflows/dotnet-demos.yml
index b56519c618..c6e99c110d 100644
--- a/.github/workflows/dotnet-demos.yml
+++ b/.github/workflows/dotnet-demos.yml
@@ -56,7 +56,7 @@ jobs:
strategy:
matrix:
- machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64]
+ machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64, pv-windows-arm64]
steps:
- uses: actions/checkout@v3
diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml
index 7e2013db15..5ebbd50022 100644
--- a/.github/workflows/dotnet.yml
+++ b/.github/workflows/dotnet.yml
@@ -105,7 +105,7 @@ jobs:
strategy:
matrix:
- machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-32, rpi5-64]
+ machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-32, rpi5-64, pv-windows-arm64]
steps:
- uses: actions/checkout@v3
diff --git a/.github/workflows/java-demos.yml b/.github/workflows/java-demos.yml
index 3a8a0af058..aec700eb2f 100644
--- a/.github/workflows/java-demos.yml
+++ b/.github/workflows/java-demos.yml
@@ -47,7 +47,7 @@ jobs:
strategy:
matrix:
- machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64]
+ machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64, pv-windows-arm64]
steps:
- uses: actions/checkout@v3
diff --git a/.github/workflows/java-perf.yml b/.github/workflows/java-perf.yml
index 4f684b85df..4e18954a75 100644
--- a/.github/workflows/java-perf.yml
+++ b/.github/workflows/java-perf.yml
@@ -99,3 +99,24 @@ jobs:
- name: Machine state after
working-directory: resources/scripts
run: bash machine-state.sh
+
+ perf-windows-arm64:
+ runs-on: ${{ matrix.machine }}
+
+ strategy:
+ fail-fast: false
+ matrix:
+ machine: [pv-windows-arm64]
+ include:
+ - machine: pv-windws-arm64
+ num_test_iterations: 50
+ performance_threshold_sec: 0.5
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Build
+ run: ./gradlew assemble
+
+ - name: Test
+ run: ./gradlew test --info --tests PorcupinePerformanceTest -DpvTestingAccessKey="${{secrets.PV_VALID_ACCESS_KEY}}" -DnumTestIterations="${{matrix.num_test_iterations}}" -DperformanceThresholdSec="${{matrix.performance_threshold_sec}}"
diff --git a/.github/workflows/java.yml b/.github/workflows/java.yml
index 3fdbea7347..e3020374dc 100644
--- a/.github/workflows/java.yml
+++ b/.github/workflows/java.yml
@@ -63,7 +63,7 @@ jobs:
strategy:
matrix:
- machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64]
+ machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64, pv-windows-arm64]
steps:
- uses: actions/checkout@v3
diff --git a/.github/workflows/nodejs-demos.yml b/.github/workflows/nodejs-demos.yml
index 6ffbbfa158..fc92ad7b55 100644
--- a/.github/workflows/nodejs-demos.yml
+++ b/.github/workflows/nodejs-demos.yml
@@ -39,6 +39,14 @@ jobs:
with:
node-version: ${{ matrix.node-version }}
+ # ************ REMOVE AFTER RELEASE ***************
+ - name: build local binding
+ run: |
+ yarn install
+ yarn build
+ working-directory: binding/nodejs
+ # ************ REMOVE AFTER RELEASE ***************
+
- name: Install dependencies
run: yarn install
@@ -50,11 +58,19 @@ jobs:
strategy:
matrix:
- machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64]
+ machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64, pv-windows-arm64]
steps:
- uses: actions/checkout@v3
+ # ************ REMOVE AFTER RELEASE ***************
+ - name: build local binding
+ run: |
+ yarn install
+ yarn build
+ working-directory: binding/nodejs
+ # ************ REMOVE AFTER RELEASE ***************
+
- name: Install dependencies
run: yarn install
diff --git a/.github/workflows/nodejs-perf.yml b/.github/workflows/nodejs-perf.yml
index dfb552e9e6..c91708c666 100644
--- a/.github/workflows/nodejs-perf.yml
+++ b/.github/workflows/nodejs-perf.yml
@@ -103,3 +103,27 @@ jobs:
- name: Machine state after
working-directory: resources/scripts
run: bash machine-state.sh
+
+ performance-windows-arm64:
+ runs-on: ${{ matrix.machine }}
+
+ strategy:
+ fail-fast: false
+ matrix:
+ machine: [pv-windows-arm64]
+ include:
+ - machine: pv-windows-arm64
+ num_test_iterations: 50
+ performance_threshold_sec: 0.5
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Pre-build dependencies
+ run: npm install --global yarn
+
+ - name: Install dependencies
+ run: yarn install
+
+ - name: Test
+ run: yarn test test/perf.test.ts --access_key=${{secrets.PV_VALID_ACCESS_KEY}} --num_test_iterations=${{matrix.num_test_iterations}} --performance_threshold_sec=${{matrix.performance_threshold_sec}}
diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml
index 823372afb0..ba81ef4c37 100644
--- a/.github/workflows/nodejs.yml
+++ b/.github/workflows/nodejs.yml
@@ -66,7 +66,7 @@ jobs:
strategy:
matrix:
- machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64]
+ machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64, pv-windows-arm64]
steps:
- uses: actions/checkout@v3
diff --git a/.github/workflows/python-demos.yml b/.github/workflows/python-demos.yml
index 72d077f055..d93ef628ea 100644
--- a/.github/workflows/python-demos.yml
+++ b/.github/workflows/python-demos.yml
@@ -39,6 +39,14 @@ jobs:
- name: Pre-build dependencies
run: python -m pip install --upgrade pip
+ # ************ REMOVE AFTER RELEASE ***************
+ - name: build local binding
+ run: |
+ python3 -m pip install setuptools wheel
+ python3 -m setup sdist bdist_wheel
+ working-directory: binding/python
+ # ************ REMOVE AFTER RELEASE ***************
+
- name: Install dependencies
run: pip install -r requirements.txt
@@ -50,11 +58,19 @@ jobs:
strategy:
matrix:
- machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64]
+ machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64, pv-windows-arm64]
steps:
- uses: actions/checkout@v3
+ # ************ REMOVE AFTER RELEASE ***************
+ - name: build local binding
+ run: |
+ python3 -m pip install setuptools wheel
+ python3 -m setup sdist bdist_wheel
+ working-directory: binding/python
+ # ************ REMOVE AFTER RELEASE ***************
+
- name: Install dependencies
run: pip3 install -r requirements.txt
diff --git a/.github/workflows/python-perf.yml b/.github/workflows/python-perf.yml
index 0699c18849..b111912951 100644
--- a/.github/workflows/python-perf.yml
+++ b/.github/workflows/python-perf.yml
@@ -100,3 +100,21 @@ jobs:
- name: Machine state after
working-directory: resources/scripts
run: bash machine-state.sh
+
+ perf-windows-arm64:
+ runs-on: ${{ matrix.machine }}
+
+ strategy:
+ fail-fast: false
+ matrix:
+ machine: [pv-windows-arm64]
+ include:
+ - machine: pv-windows-arm64
+ num_test_iterations: 50
+ performance_threshold_sec: 0.5
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Test
+ run: python3 test_porcupine_perf.py ${{secrets.PV_VALID_ACCESS_KEY}} ${{matrix.num_test_iterations}} ${{matrix.performance_threshold_sec}}
diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml
index 93f16655b1..eef546666a 100644
--- a/.github/workflows/python.yml
+++ b/.github/workflows/python.yml
@@ -70,7 +70,7 @@ jobs:
strategy:
matrix:
- machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64]
+ machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64, pv-windows-arm64]
steps:
- uses: actions/checkout@v3
diff --git a/README.md b/README.md
index c00a91f02d..4130ef465e 100644
--- a/README.md
+++ b/README.md
@@ -33,7 +33,7 @@ applications. It is
- Raspberry Pi (Zero, 3, 4, 5)
- Android and iOS
- Chrome, Safari, Firefox, and Edge
- - Linux (x86_64), macOS (x86_64, arm64), and Windows (x86_64)
+ - Linux (x86_64), macOS (x86_64, arm64), and Windows (x86_64, arm64)
- scalable. It can detect multiple always-listening voice commands with no added runtime footprint.
- self-service. Developers can train custom wake word models using [Picovoice Console](https://console.picovoice.ai/).
diff --git a/binding/dotnet/Porcupine/Porcupine.csproj b/binding/dotnet/Porcupine/Porcupine.csproj
index d9b0a126c3..51ad01c974 100644
--- a/binding/dotnet/Porcupine/Porcupine.csproj
+++ b/binding/dotnet/Porcupine/Porcupine.csproj
@@ -2,7 +2,7 @@
net8.0;net6.0;netcoreapp3.0;netstandard2.0
- 3.0.4
+ 3.0.5
Picovoice
Porcupine Wake Word Engine
@@ -58,6 +58,16 @@
lib\windows\amd64\libpv_porcupine.dll
false
+
+
+ build/netcoreapp3.0/lib/windows/arm64/libpv_porcupine.dll;
+ build/net6.0/lib/windows/arm64/libpv_porcupine.dll;
+ build/net8.0/lib/windows/arm64/libpv_porcupine.dll;
+
+ PreserveNewest
+ lib\windows\arm64\libpv_porcupine.dll
+ false
+
build/netstandard2.0/libpv_porcupine.so;
diff --git a/binding/dotnet/Porcupine/Utils.cs b/binding/dotnet/Porcupine/Utils.cs
index f5f3fcb4ad..91040723d2 100644
--- a/binding/dotnet/Porcupine/Utils.cs
+++ b/binding/dotnet/Porcupine/Utils.cs
@@ -55,6 +55,10 @@ public static string PvLibraryPath(string libName)
{
return Path.Combine(AppContext.BaseDirectory, $"lib/{_env}/amd64/{libName}.dll");
}
+ else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && _arch == Architecture.Arm64)
+ {
+ return Path.Combine(AppContext.BaseDirectory, $"lib/{_env}/arm64/{libName}.dll");
+ }
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) && _arch == Architecture.X64)
{
return Path.Combine(AppContext.BaseDirectory, $"lib/{_env}/x86_64/{libName}.dylib");
diff --git a/binding/dotnet/README.md b/binding/dotnet/README.md
index a1d7cd4442..f52bb3704a 100644
--- a/binding/dotnet/README.md
+++ b/binding/dotnet/README.md
@@ -22,13 +22,13 @@ Porcupine is:
Platform compatible with .NET Framework 4.6.1+:
-- Windows (x86_64)
+- Windows (x86_64, arm64)
Platforms compatible with .NET Core 2.0+:
- Linux (x86_64)
- macOS (x86_64)
-- Windows (x86_64)
+- Windows (x86_64, arm64)
Platforms compatible with .NET Core 3.0+:
diff --git a/binding/java/README.md b/binding/java/README.md
index d1e145f466..98cbd09639 100644
--- a/binding/java/README.md
+++ b/binding/java/README.md
@@ -24,7 +24,7 @@ To learn more about Porcupine, see the [product](https://picovoice.ai/products/p
- Linux (x86_64)
- macOS (x86_64, arm64)
-- Windows (x86_64)
+- Windows (x86_64, arm64)
- Raspberry Pi 3 (32 and 64 bit), Raspberry Pi 4 (32 and 64 bit), Raspberry Pi 5 (32 and 64 bit)
## Installation
diff --git a/binding/java/build.gradle b/binding/java/build.gradle
index 528a3b7411..fd6860fee1 100644
--- a/binding/java/build.gradle
+++ b/binding/java/build.gradle
@@ -8,7 +8,7 @@ plugins {
ext {
PUBLISH_GROUP_ID = 'ai.picovoice'
- PUBLISH_VERSION = '3.0.3'
+ PUBLISH_VERSION = '3.0.4'
PUBLISH_ARTIFACT_ID = 'porcupine-java'
}
@@ -124,7 +124,10 @@ task copyMacLib(type: Copy) {
into "${outputDir}/porcupine/lib/java/mac/"
}
task copyWindowsLib(type: Copy) {
- from('../../lib/java/windows/amd64/pv_porcupine_jni.dll') into "${outputDir}/porcupine/lib/java/windows/amd64/"
+ from('../../lib/java/windows/')
+ include('amd64/pv_porcupine_jni.dll',
+ 'arm64/pv_porcupine_jni.dll')
+ into "${outputDir}/porcupine/lib/java/windows/"
}
task copyRPiLib(type: Copy) {
from('../../lib/java/raspberry-pi/')
diff --git a/binding/java/gradle/wrapper/gradle-wrapper.properties b/binding/java/gradle/wrapper/gradle-wrapper.properties
index d2880ba800..d6e308a637 100644
--- a/binding/java/gradle/wrapper/gradle-wrapper.properties
+++ b/binding/java/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/binding/java/src/ai/picovoice/porcupine/Utils.java b/binding/java/src/ai/picovoice/porcupine/Utils.java
index e349b1ebd2..29cd95f104 100644
--- a/binding/java/src/ai/picovoice/porcupine/Utils.java
+++ b/binding/java/src/ai/picovoice/porcupine/Utils.java
@@ -163,6 +163,8 @@ private static String getArchitecture() throws RuntimeException {
} else if (ENVIRONMENT_NAME.equals("windows")) {
if (isX86_64) {
return "amd64";
+ } else if (isArm) {
+ return "arm64";
}
} else if (ENVIRONMENT_NAME.equals("linux")) {
if (isX86_64) {
@@ -242,7 +244,9 @@ public static String getPackagedLibraryPath() {
switch (ENVIRONMENT_NAME) {
case "windows":
return RESOURCE_DIRECTORY
- .resolve("lib/java/windows/amd64/pv_porcupine_jni.dll")
+ .resolve("lib/java/windows")
+ .resolve(ARCHITECTURE)
+ .resolve("pv_porcupine_jni.dll")
.toString();
case "mac":
return RESOURCE_DIRECTORY.resolve("lib/java/mac")
diff --git a/binding/nodejs/README.md b/binding/nodejs/README.md
index d3cca78dd1..c9d0a85b5d 100644
--- a/binding/nodejs/README.md
+++ b/binding/nodejs/README.md
@@ -25,7 +25,7 @@ Unlike the built-in keywords, custom PPN files generated with the Picovoice Cons
This binding is for running Porcupine on **Node.js 16+** on the following platforms:
-- Windows (x86_64)
+- Windows (x86_64, arm64)
- Linux (x86_64)
- macOS (x86_64, arm64)
- Raspberry Pi (3, 4, 5)
diff --git a/binding/nodejs/package.json b/binding/nodejs/package.json
index 0950dd041f..4100ef73de 100644
--- a/binding/nodejs/package.json
+++ b/binding/nodejs/package.json
@@ -1,6 +1,6 @@
{
"name": "@picovoice/porcupine-node",
- "version": "3.0.4",
+ "version": "3.0.5",
"description": "Picovoice Porcupine Node.js binding",
"main": "dist/index.js",
"types": "dist/types/index.d.ts",
diff --git a/binding/nodejs/src/platforms.ts b/binding/nodejs/src/platforms.ts
index 46c242ff59..85d7874e53 100644
--- a/binding/nodejs/src/platforms.ts
+++ b/binding/nodejs/src/platforms.ts
@@ -76,6 +76,10 @@ SYSTEM_TO_LIBRARY_PATH.set(
`${SYSTEM_WINDOWS}/${X86_64}`,
`${PLATFORM_WINDOWS}/amd64/pv_porcupine.node`
);
+SYSTEM_TO_LIBRARY_PATH.set(
+ `${SYSTEM_WINDOWS}/${ARM_64}`,
+ `${PLATFORM_WINDOWS}/arm64/pv_porcupine.node`
+);
function absoluteLibraryPath(libraryPath: string): string {
return path.resolve(__dirname, LIBRARY_PATH_PREFIX, libraryPath);
@@ -127,7 +131,7 @@ export function getPlatform(): string {
return PLATFORM_MAC;
}
- if (system === SYSTEM_WINDOWS && arch === X86_64) {
+ if (system === SYSTEM_WINDOWS && (arch === X86_64 || arch === ARM_64)) {
return PLATFORM_WINDOWS;
}
@@ -175,9 +179,9 @@ export function getSystemLibraryPath(): string {
}
break;
case SYSTEM_WINDOWS:
- if (arch === X86_64) {
+ if (arch === X86_64 || arch === ARM_64) {
return absoluteLibraryPath(
- SYSTEM_TO_LIBRARY_PATH.get(`${SYSTEM_WINDOWS}/${X86_64}`)
+ SYSTEM_TO_LIBRARY_PATH.get(`${SYSTEM_WINDOWS}/${arch}`)
);
}
break;
diff --git a/binding/python/README.md b/binding/python/README.md
index 3c7be8c386..8e14cc49b3 100644
--- a/binding/python/README.md
+++ b/binding/python/README.md
@@ -19,7 +19,7 @@ applications. It is
## Compatibility
- Python 3.8+
-- Runs on Linux (x86_64), macOS (x86_64 and arm64), Windows (x86_64), and Raspberry Pi (Zero, 3, 4, 5).
+- Runs on Linux (x86_64), macOS (x86_64 and arm64), Windows (x86_64, arm64), and Raspberry Pi (Zero, 3, 4, 5).
## Installation
diff --git a/binding/python/_util.py b/binding/python/_util.py
index 54c0281f99..5aa7059487 100644
--- a/binding/python/_util.py
+++ b/binding/python/_util.py
@@ -96,7 +96,10 @@ def pv_library_path(relative):
relative,
'lib/raspberry-pi/%s/libpv_porcupine.so' % _PV_MACHINE)
elif _PV_SYSTEM == 'Windows':
- return os.path.join(os.path.dirname(__file__), relative, 'lib/windows/amd64/libpv_porcupine.dll')
+ if _PV_MACHINE.lower() == 'amd64':
+ return os.path.join(os.path.dirname(__file__), relative, 'lib/windows/amd64/libpv_porcupine.dll')
+ elif _PV_MACHINE.lower() == 'arm64':
+ return os.path.join(os.path.dirname(__file__), relative, 'lib/windows/arm64/libpv_porcupine.dll')
raise NotImplementedError('Unsupported platform.')
diff --git a/binding/python/setup.py b/binding/python/setup.py
index d354ba2508..33ae7809d0 100644
--- a/binding/python/setup.py
+++ b/binding/python/setup.py
@@ -51,6 +51,7 @@
include pvporcupine/lib/mac/arm64/libpv_porcupine.dylib
recursive-include pvporcupine/lib/raspberry-pi *
include pvporcupine/lib/windows/amd64/libpv_porcupine.dll
+include pvporcupine/lib/windows/arm64/libpv_porcupine.dll
recursive-include pvporcupine/resources/keyword_files/linux *
recursive-include pvporcupine/resources/keyword_files/mac/ *
recursive-include pvporcupine/resources/keyword_files/raspberry-pi *
@@ -65,7 +66,7 @@
setuptools.setup(
name="pvporcupine",
- version="3.0.3",
+ version="3.0.4",
author="Picovoice",
author_email="hello@picovoice.ai",
description="Porcupine wake word engine.",
diff --git a/demo/dotnet/PorcupineDemo/PorcupineDemo.csproj b/demo/dotnet/PorcupineDemo/PorcupineDemo.csproj
index fb360d1496..5929334130 100644
--- a/demo/dotnet/PorcupineDemo/PorcupineDemo.csproj
+++ b/demo/dotnet/PorcupineDemo/PorcupineDemo.csproj
@@ -19,7 +19,7 @@
-
+
diff --git a/demo/dotnet/README.md b/demo/dotnet/README.md
index f43ea991ca..a647df27ef 100644
--- a/demo/dotnet/README.md
+++ b/demo/dotnet/README.md
@@ -24,7 +24,7 @@ Porcupine is:
- Linux (x86_64)
- macOS (x86_64, arm64)
-- Windows (x86_64)
+- Windows (x86_64, arm64)
- Raspberry Pi:
- 3 (32 and 64 bit)
- 4 (32 and 64 bit)
diff --git a/demo/java/README.md b/demo/java/README.md
index 8340ca2300..1b8c6cf38b 100644
--- a/demo/java/README.md
+++ b/demo/java/README.md
@@ -25,7 +25,7 @@ To learn more about Porcupine, see the [product](https://picovoice.ai/products/p
- Linux (x86_64)
- macOS (x86_64, arm64)
-- Windows (x86_64)
+- Windows (x86_64, arm64)
- Raspberry Pi 3 (32 and 64 bit), Raspberry Pi 4 (32 and 64 bit), Raspberry Pi 5 (32 and 64 bit)
## Installation
diff --git a/demo/java/build.gradle b/demo/java/build.gradle
index 2f6815e09e..ccb36b1a81 100644
--- a/demo/java/build.gradle
+++ b/demo/java/build.gradle
@@ -15,14 +15,14 @@ sourceSets {
}
dependencies {
- implementation 'ai.picovoice:porcupine-java:3.0.3'
+ implementation 'ai.picovoice:porcupine-java:3.0.4'
implementation 'commons-cli:commons-cli:1.4'
}
jar {
manifest {
attributes "Main-Class": "ai.picovoice.porcupinedemo.MicDemo",
- "Class-Path" : "porcupine-3.0.3.jar;commons-cli-1.4.jar"
+ "Class-Path" : "porcupine-3.0.4.jar;commons-cli-1.4.jar"
}
from sourceSets.main.output
exclude "**/FileDemo.class"
@@ -33,7 +33,7 @@ jar {
task fileDemoJar(type: Jar) {
manifest {
attributes "Main-Class": "ai.picovoice.porcupinedemo.FileDemo",
- "Class-Path" : "porcupine-3.0.3.jar;commons-cli-1.4.jar"
+ "Class-Path" : "porcupine-3.0.4.jar;commons-cli-1.4.jar"
}
from sourceSets.main.output
exclude "**/MicDemo.class"
diff --git a/demo/java/gradle/wrapper/gradle-wrapper.properties b/demo/java/gradle/wrapper/gradle-wrapper.properties
index d2880ba800..d6e308a637 100644
--- a/demo/java/gradle/wrapper/gradle-wrapper.properties
+++ b/demo/java/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/demo/nodejs/README.md b/demo/nodejs/README.md
index ed9695f1de..1b4438f0c7 100644
--- a/demo/nodejs/README.md
+++ b/demo/nodejs/README.md
@@ -21,7 +21,7 @@ To learn more about Porcupine, see the [product](https://picovoice.ai/products/p
These demos run Porcupine on **Node.js 12+** on the following platforms:
-- Windows (x86_64)
+- Windows (x86_64, arm64)
- Linux (x86_64)
- macOS (x86_64, arm64)
- Raspberry Pi (3, 4, 5)
diff --git a/demo/nodejs/package.json b/demo/nodejs/package.json
index 31cf65bfa4..d62042e7c6 100644
--- a/demo/nodejs/package.json
+++ b/demo/nodejs/package.json
@@ -1,6 +1,6 @@
{
"name": "@picovoice/porcupine-node-demo",
- "version": "3.0.4",
+ "version": "3.0.5",
"description": "Picovoice Porcupine Node.js file-based and microphone demos",
"scripts": {
"file": "node file.js",
@@ -16,7 +16,7 @@
"author": "Picovoice, Inc.",
"license": "Apache-2.0",
"dependencies": {
- "@picovoice/porcupine-node": "~3.0.4",
+ "@picovoice/porcupine-node": "../../binding/nodejs",
"@picovoice/pvrecorder-node": "~1.2.2",
"commander": "^6.1.0",
"wavefile": "^11.0.0"
diff --git a/demo/python/README.md b/demo/python/README.md
index 61fd215a98..88875329fa 100644
--- a/demo/python/README.md
+++ b/demo/python/README.md
@@ -18,7 +18,7 @@ applications. It is
## Compatibility
- Python 3.8+
-- Runs on Linux (x86_64), Mac (x86_64 and arm64), Windows (x86_64), and Raspberry Pi (Zero, 3, 4, 5).
+- Runs on Linux (x86_64), Mac (x86_64 and arm64), Windows (x86_64, arm64), and Raspberry Pi (Zero, 3, 4, 5).
## Installation
diff --git a/demo/python/requirements.txt b/demo/python/requirements.txt
index e1c24b35f7..6c82edac08 100644
--- a/demo/python/requirements.txt
+++ b/demo/python/requirements.txt
@@ -1,2 +1,2 @@
-pvporcupine==3.0.3
+../../binding/python/dist/pvporcupine-3.0.4-py3-none-any.whl
pvrecorder==1.2.2
diff --git a/demo/python/setup.py b/demo/python/setup.py
index fc2744469c..25a7d12319 100644
--- a/demo/python/setup.py
+++ b/demo/python/setup.py
@@ -28,7 +28,7 @@
setuptools.setup(
name="pvporcupinedemo",
- version="3.0.3",
+ version="3.0.4",
author="Picovoice",
author_email="hello@picovoice.ai",
description="Porcupine wake word engine demos",
@@ -36,7 +36,7 @@
long_description_content_type="text/markdown",
url="https://github.com/Picovoice/porcupine",
packages=["pvporcupinedemo"],
- install_requires=["pvporcupine==3.0.3", "pvrecorder==1.2.2"],
+ install_requires=["pvporcupine==3.0.4", "pvrecorder==1.2.2"],
include_package_data=True,
classifiers=[
"Development Status :: 5 - Production/Stable",
diff --git a/demo/respeaker/README.md b/demo/respeaker/README.md
index 5be4c503a3..9e7b1eb023 100644
--- a/demo/respeaker/README.md
+++ b/demo/respeaker/README.md
@@ -16,7 +16,7 @@ applications. It is
- Raspberry Pi (3, 4, 5)
- Android and iOS
- Chrome, Safari, Firefox, and Edge
- - Linux (x86_64), macOS (x86_64, arm64), and Windows (x86_64)
+ - Linux (x86_64), macOS (x86_64, arm64), and Windows (x86_64, arm64)
- scalable. It can detect multiple always-listening voice commands with no added runtime footprint.
- self-service. Developers can train custom wake word models using [Picovoice Console](https://console.picovoice.ai/).
diff --git a/lib/java/windows/arm64/pv_porcupine_jni.dll b/lib/java/windows/arm64/pv_porcupine_jni.dll
new file mode 100644
index 0000000000..ad761d31f2
Binary files /dev/null and b/lib/java/windows/arm64/pv_porcupine_jni.dll differ
diff --git a/lib/node/windows/arm64/pv_porcupine.node b/lib/node/windows/arm64/pv_porcupine.node
new file mode 100644
index 0000000000..91e37c3397
Binary files /dev/null and b/lib/node/windows/arm64/pv_porcupine.node differ
diff --git a/lib/windows/arm64/libpv_porcupine.dll b/lib/windows/arm64/libpv_porcupine.dll
new file mode 100644
index 0000000000..f22130bc2d
Binary files /dev/null and b/lib/windows/arm64/libpv_porcupine.dll differ