meeting-noter 0.3.1__py3-none-any.whl → 0.3.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,12 +3,36 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import re
6
+ import sys
6
7
  import numpy as np
7
- import lameenc
8
8
  from pathlib import Path
9
9
  from datetime import datetime
10
10
  from typing import Optional, Tuple
11
11
 
12
+ # Try to import lameenc, provide helpful error if not available
13
+ try:
14
+ import lameenc
15
+ LAMEENC_AVAILABLE = True
16
+ except ImportError:
17
+ LAMEENC_AVAILABLE = False
18
+ lameenc = None
19
+
20
+
21
+ def _check_lameenc():
22
+ """Check if lameenc is available, raise helpful error if not."""
23
+ if not LAMEENC_AVAILABLE:
24
+ print("\n" + "=" * 60, file=sys.stderr)
25
+ print("ERROR: MP3 encoding requires the 'lame' library", file=sys.stderr)
26
+ print("=" * 60, file=sys.stderr)
27
+ print("\nTo fix this, run:", file=sys.stderr)
28
+ print("\n brew install lame", file=sys.stderr)
29
+ print("\nThen reinstall meeting-noter:", file=sys.stderr)
30
+ print("\n pip install --force-reinstall meeting-noter", file=sys.stderr)
31
+ print("\n" + "=" * 60 + "\n", file=sys.stderr)
32
+ raise ImportError(
33
+ "lameenc not available. Install LAME first: brew install lame"
34
+ )
35
+
12
36
 
13
37
  def _sanitize_filename(name: str, max_length: int = 50) -> str:
14
38
  """Sanitize a string for use as a filename.
@@ -47,6 +71,7 @@ class MP3Encoder:
47
71
  bitrate: int = 128,
48
72
  quality: int = 2,
49
73
  ):
74
+ _check_lameenc()
50
75
  self.sample_rate = sample_rate
51
76
  self.channels = channels
52
77
  self.encoder = lameenc.Encoder()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meeting-noter
3
- Version: 0.3.1
3
+ Version: 0.3.3
4
4
  Summary: Offline meeting transcription for macOS with automatic meeting detection
5
5
  Author: Victor
6
6
  License: MIT
@@ -18,14 +18,14 @@ Classifier: Programming Language :: Python :: 3.9
18
18
  Classifier: Programming Language :: Python :: 3.10
19
19
  Classifier: Programming Language :: Python :: 3.11
20
20
  Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
21
22
  Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
22
- Requires-Python: <3.13,>=3.9
23
+ Requires-Python: >=3.9
23
24
  Description-Content-Type: text/markdown
24
25
  Requires-Dist: click>=8.0
25
26
  Requires-Dist: sounddevice>=0.4.6
26
- Requires-Dist: numpy>=1.21
27
+ Requires-Dist: numpy>=1.24
27
28
  Requires-Dist: faster-whisper>=1.0.0
28
- Requires-Dist: lameenc>=1.5.0
29
29
  Requires-Dist: rumps>=0.4.0
30
30
  Requires-Dist: PyQt6>=6.5.0
31
31
  Requires-Dist: pyobjc-framework-Cocoa>=9.0; sys_platform == "darwin"
@@ -34,6 +34,8 @@ Requires-Dist: pyobjc-framework-ScreenCaptureKit>=9.0; sys_platform == "darwin"
34
34
  Requires-Dist: pyobjc-framework-AVFoundation>=9.0; sys_platform == "darwin"
35
35
  Requires-Dist: pyobjc-framework-CoreMedia>=9.0; sys_platform == "darwin"
36
36
  Requires-Dist: pyobjc-framework-libdispatch>=9.0; sys_platform == "darwin"
37
+ Provides-Extra: mp3
38
+ Requires-Dist: lameenc>=1.5.0; extra == "mp3"
37
39
  Provides-Extra: dev
38
40
  Requires-Dist: pytest>=7.0; extra == "dev"
39
41
  Requires-Dist: pytest-cov; extra == "dev"
@@ -56,12 +58,6 @@ Offline meeting transcription tool for macOS. Captures both your voice and meeti
56
58
 
57
59
  ## Installation
58
60
 
59
- First, install the LAME audio encoder (required for MP3 encoding):
60
- ```bash
61
- brew install lame
62
- ```
63
-
64
- Then install meeting-noter:
65
61
  ```bash
66
62
  pip install meeting-noter
67
63
  ```
@@ -71,6 +67,14 @@ Or with pipx (recommended):
71
67
  pipx install meeting-noter
72
68
  ```
73
69
 
70
+ **For MP3 support** (smaller files), install LAME first:
71
+ ```bash
72
+ brew install lame
73
+ pip install meeting-noter[mp3]
74
+ ```
75
+
76
+ Without LAME, the app will prompt you to install it when you try to record.
77
+
74
78
  ## Quick Start
75
79
 
76
80
  **Menu Bar App** (recommended):
@@ -208,8 +212,8 @@ Config file: `~/.config/meeting-noter/config.json`
208
212
  ## Requirements
209
213
 
210
214
  - macOS 12.3+ (for ScreenCaptureKit)
211
- - Python 3.9 - 3.12
212
- - LAME audio encoder (`brew install lame`)
215
+ - Python 3.9+
216
+ - LAME audio encoder (`brew install lame`) - optional but recommended for MP3
213
217
 
214
218
  ## License
215
219
 
@@ -7,7 +7,7 @@ meeting_noter/meeting_detector.py,sha256=I8zzSdSSmbfd3yyCOyzPL8AS-xSHttFCagrDE35
7
7
  meeting_noter/menubar.py,sha256=Wmwaw-_f2Zky6-0DLC5Ql2o6_VBG1-sWacL85dNeGwU,15366
8
8
  meeting_noter/audio/__init__.py,sha256=O7PU8CxHSHxMeHbc9Jdwt9kePLQzsPh81GQU7VHCtBY,44
9
9
  meeting_noter/audio/capture.py,sha256=fDrT5oXfva8vdFlht9cv60NviKbksw2QeJ8eOtI19uE,6469
10
- meeting_noter/audio/encoder.py,sha256=UT9yLbURsRfVafRbT-DRianSCx1fOEwWPLP-LULYqVo,5443
10
+ meeting_noter/audio/encoder.py,sha256=C-lGn6S-1KmvfeXMaP032XhifDNMe6sa0RKDZHoZlio,6374
11
11
  meeting_noter/audio/system_audio.py,sha256=jbHGjNCerI19weXap0a90Ik17lVTCT1hCEgRKYke-p8,13016
12
12
  meeting_noter/gui/__init__.py,sha256=z5GxxaeXyjqyEa9ox0dQxuL5u_BART0bi7cI6rfntEI,103
13
13
  meeting_noter/gui/__main__.py,sha256=A2HWdYod0bTgjQQIi21O7XpmgxLH36e_X0aygEUZLls,146
@@ -31,8 +31,8 @@ meeting_noter/resources/icon_512.png,sha256=o7X3ngYcppcIAAk9AcfPx94MUmrsPRp0qBTp
31
31
  meeting_noter/resources/icon_64.png,sha256=TqG7Awx3kK8YdiX1e_z1odZonosZyQI2trlkNZCzUoI,607
32
32
  meeting_noter/transcription/__init__.py,sha256=7GY9diP06DzFyoli41wddbrPv5bVDzH35bmnWlIJev4,29
33
33
  meeting_noter/transcription/engine.py,sha256=HK2J2QOBNIDm1MXW-gkagXP8C8cqUfK_WylHQD_LqOI,6320
34
- meeting_noter-0.3.1.dist-info/METADATA,sha256=GELR_0dUr3kas2fshyQCSC6KkrwfnTCoKRYVsIiUdpU,6724
35
- meeting_noter-0.3.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
36
- meeting_noter-0.3.1.dist-info/entry_points.txt,sha256=rKNhzjSF5-e3bLRr8LVe22FeiwcacXabCvNpoEXfu4I,56
37
- meeting_noter-0.3.1.dist-info/top_level.txt,sha256=9Tuq04_0SXM0OXOHVbOHkHkB5tG3fqkrMrfzCMpbLpY,14
38
- meeting_noter-0.3.1.dist-info/RECORD,,
34
+ meeting_noter-0.3.3.dist-info/METADATA,sha256=qhcVN8AGEu4sG7nemONR1VSHvM1kz8zm5Q9-k8DcSl0,6904
35
+ meeting_noter-0.3.3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
36
+ meeting_noter-0.3.3.dist-info/entry_points.txt,sha256=rKNhzjSF5-e3bLRr8LVe22FeiwcacXabCvNpoEXfu4I,56
37
+ meeting_noter-0.3.3.dist-info/top_level.txt,sha256=9Tuq04_0SXM0OXOHVbOHkHkB5tG3fqkrMrfzCMpbLpY,14
38
+ meeting_noter-0.3.3.dist-info/RECORD,,