Metadata-Version: 2.4
Name: mlx-forced-aligner
Version: 0.1.0
Summary: CTC Forced Alignment on Apple Silicon using MLX - torch-free word/character-level timestamps
Author: COIDEMO
License: MIT
Keywords: mlx,forced-alignment,wav2vec2,apple-silicon,speech
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: MacOS
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: mlx>=0.20.0
Requires-Dist: numpy>=1.26.0
Requires-Dist: soundfile>=0.12.0
Requires-Dist: huggingface-hub>=0.20.0
Provides-Extra: dev
Requires-Dist: pytest>=7.4.0; extra == "dev"
Requires-Dist: ruff>=0.1.0; extra == "dev"
Dynamic: license-file

# mlx-forced-aligner

CTC Forced Alignment on Apple Silicon using MLX.

PyTorch不要で、wav2vec2を使った文字・単語レベルのタイムスタンプ生成を行います。

## Requirements

- **macOS with Apple Silicon** (M1/M2/M3/M4)
- Python 3.10+

## Installation

```bash
pip install mlx-forced-aligner
```

## Usage

### Python API

```python
from mlx_forced_aligner import ForcedAligner

aligner = ForcedAligner()  # デフォルト: 日本語モデル (Coidemo/wav2vec2-japanese-mlx)
result = aligner.align("audio.wav", "こんにちは世界")

for word in result.words:
    print(f"{word.word}: {word.start_time:.3f} - {word.end_time:.3f}")
```

### セグメント付きアライメント

```python
segments = [
    {"start": 0.0, "end": 5.0, "text": "こんにちは"},
    {"start": 5.0, "end": 10.0, "text": "世界"},
]
result = aligner.align("audio.wav", "", segments=segments)
```

### CLI

```bash
# テキストをアライメント
mlx-align align audio.wav "こんにちは世界"

# セグメントファイルを使用
mlx-align align audio.wav --segments segments.json

# HuggingFaceモデルをMLX形式に変換
mlx-align convert --model jonatasgrosman/wav2vec2-large-xlsr-53-japanese
```

## License

MIT
